zoukankan      html  css  js  c++  java
  • 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 的一些常用方法。

  • 相关阅读:
    [MacOS]Sublime text3 安装(一)
    [RHEL8]开启BBR
    PAT Advanced 1136 A Delayed Palindrome (20分)
    PAT Advanced 1144 The Missing Number (20分)
    PAT Advanced 1041 Be Unique (20分)
    PAT Advanced 1025 PAT Ranking (25分)
    PAT Advanced 1022 Digital Library (30分)
    PAT Advanced 1019 General Palindromic Number (20分)
    PAT Advanced 1011 World Cup Betting (20分)
    PAT Advanced 1102 Invert a Binary Tree (25分)
  • 原文地址:https://www.cnblogs.com/weisenz/p/2453864.html
Copyright © 2011-2022 走看看