• Python 爬虫类库 Selenium 的常用方法介绍


    Selenium 简介

    Selenium 是一个 Web 的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是 Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括 PhantomJS 这些无界面的浏览器)。
    Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。
    Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。
    先下载 selenium webdriver geckodriver.exe,下载好后放到 python 目录里面。
    Firefox 的目录也要添加到环境变量中。
    Selenium 库里有个叫 WebDriver 的 API。WebDriver 有点儿像可以加载网站的浏览器,但是它也可以像 BeautifulSoup 或者其他 Selector 对象一样用来查找页面元素,与页面上的元素进行交互(发送文本、点击等),以及执行其他动作来运行网络爬虫。

    Selenium 快速入门

    # -*- coding:utf-8 -*-
    from selenium import webdriver
    # 要想调用键盘按键操作需要引入 keys 包
    from selenium.webdriver.common.keys import Keys
    
    # 创建浏览器对象
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    
    # 打印页面标题“百度一下你就知道”
    print(driver.title)
    
    # 生成当前页面快照
    driver.save_screenshot("baidu.png")
    
    # 是百度搜索框,输入字符串“微博”,跳转到搜索页面
    driver.find_element_by_id("kw").send_keys(u"微博")
    
    # 是百度搜索按钮,click() 是模拟点击
    driver.find_element_by_id("su").click()
    
    # 获取新的页面快照
    driver.save_screenshot(u"screenshot.png")
    
    # 打印网页渲染后的源代码
    print(driver.page_source)
    
    # 获取当前页面 Cookie
    print(driver.get_cookies())
    
    # ctrl+a 全选输入框内容
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')
    
    # ctrl+x 剪切输入框内容
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x')
    
    # 输入框重新输入内容
    driver.find_element_by_id("kw").send_keys("test")
    
    # 模拟 Enter 回车键
    driver.find_element_by_id("su").send_keys(Keys.RETURN)
    
    # 清除输入框内容
    driver.find_element_by_id("kw").clear()
    
    # 生成新的页面快照
    driver.save_screenshot("test.png")
    
    # 获取当前 url
    print(driver.current_url)
    
    # 关闭当前页面,如果只有一个页面,会关闭浏览器
    driver.close()
    
    # 关闭浏览器
    driver.quit()
    
    1、页面操作

    假如有下面的输入框:

    <input type="text" name="user-name" id="passwd-id" />
    

    查找方法如下:

    # 获取 id 标签值
    element = driver.find_element_by_id("passwd-id")
    # 获取 name 标签值
    element = driver.find_element_by_name("user-name")
    # 获取标签名值
    element = driver.find_elements_by_tag_name("input")
    # 也可以通过 XPath 来匹配
    element = driver.find_element_by_xpath("//input[@]")
    
    2、定位元素
    # 通过 Id 定位目标元素
    driver.find_element_by_id('i1')
     
    # 通过 className 定位目标元素,返回一个对象
    driver.find_element_by_class_name('c1')
     
    # 通过 name 属性定位目标元素,返回一个对象
    driver.find_element_by_name('n1')
     
    # 通过 Xpath 定位目标元素,返回一个对象
    driver.find_element_by_xpath('//*[@id="i1"]')
     
    # 通过 css Selector 定位目标元素,返回一个对象
    driver.find_element_by_css_selector('#i1')
     
    # 通过标签名称定位,返回一个对象
    driver.find_element_by_tag_name('input')
     
    # 通过标签中的文本查找元素,返回一个对象
    driver.find_element_by_link_text('登录')
    

    一次查找多个元素(这些方法会返回一个 list 列表):

    # 通过 className 定位目标元素,返回一个集合
    driver.find_elements_by_class_name('c1')
     
    # 通过 name 属性定位目标元素,返回一个集合
    driver.find_elements_by_name('n1')
     
    # 通过 Xpath 定位目标元素,返回一个集合
    driver.find_elements_by_xpath('//*[@id="i1"]')
     
    # 通过 Css Selector 定位目标元素,返回一个集合
    driver.find_elements_by_css_selector('#i1')
     
    # 通过标签名称定位,返回一个集合
    driver.find_elements_by_tag_name('input')
     
    # 通过标签中的文本查找元素,返回一个集合
    driver.find_element_by_link_text('登录')
    
    # 通过标签中文本的模糊匹配查找,返回一个集合
    find_elements_by_partial_link_text("订单")
    
    3、鼠标动作
    # -*- coding:utf-8 -*-
    from selenium import webdriver
    # 要想调用键盘按键操作需要引入 keys 包
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver import ActionChains
    # 创建浏览器对象
    driver = webdriver.Firefox()
    # 打开页面
    driver.get("http://www.baidu.com")
    # 鼠标移动到某处
    action1 = driver.find_element_by_id("su")
    ActionChains(driver).move_to_element(action1).perform()
    # 鼠标移动到某处单击
    action2 = driver.find_element_by_id("su")
    ActionChains(driver).move_to_element(action2).click(action2).perform()
    # 鼠标移动到某处双击
    action3 = driver.find_element_by_id("su")
    ActionChains(driver).move_to_element(action3).double_click(action3).perform()
    # 鼠标移动到某处右击
    action4 = driver.find_element_by_id("su")
    ActionChains(driver).move_to_element(action4).context_click(action4).perform()
    
    4、Select 表单
    # 导入 Select 类
    from selenium.webdriver.support.ui import Select
    
    # 找到 name 的选项卡
    select = Select(driver.find_element_by_name('status'))
    
    select.select_by_index(1)
    select.select_by_value("0")
    select.select_by_visible_text(u"xxx")
    

    以上是三种选择下拉框的方式,它可以根据索引来选择,可以根据值来选择,可以根据文字来选择。注意:

    index 索引从 0 开始
    value 是 option 标签的一个属性值,并不是显示在下拉框中的值
    visible_text 是在 option 标签文本的值,是显示在下拉框的值

    全部取消方法

    select.deselect_all()
    
    5、弹窗处理

    当页面出现了弹窗提示:

    alert = driver.switch_to_alert()
    
    6、页面切换

    一个浏览器肯定会有很多窗口,所以我们肯定要有方法来实现窗口的切换。切换窗口的方法如下:

    driver.switch_to.window("this is window name")
    
    7、页面前进和后退
    driver.forward()     #前进
    driver.back()        # 后退
    

    8、模拟登陆豆瓣网站

    # -*- coding:utf-8 -*-
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time
    driver = webdriver.Firefox()
    driver.get("http://www.douban.com")
    # 输入账号密码
    driver.find_element_by_name("form_email").send_keys("158xxxxxxxx")
    driver.find_element_by_name("form_password").send_keys("zhxxxxxxxx")
    # 模拟点击登录
    driver.find_element_by_xpath("//input[@]").click()
    # 等待3秒
    time.sleep(3)
    # 生成登陆后快照
    driver.save_screenshot(u"douban.png")
    driver.quit()
    

    以上就是 Selenium 的一些常用方法。

  • 相关阅读:
    阿里巴巴Java编码规范插件安装使用指南
    jhipster安装_Windows
    Linux 基本命令
    HTTPie命令介绍
    MySQL卸载
    Windows Phone8.1系统新特性
    SQL 游标知识整理
    浅析C#代理
    javascript 实现ajax
    jquery 之load post get
  • 原文地址:https://www.cnblogs.com/weisenz/p/2453864.html
Copyright © 2020-2023  润新知