zoukankan      html  css  js  c++  java
  • Selenium模块

    Selenium模块

    作用

    • 便捷的获取页面中动态加载的数据

    • 便捷的模拟登录

    简单使用

    环境安装:

    pip install selenium

    根据浏览器版本下载web驱动:http://npm.taobao.org/mirrors/chromedriver (谷歌)

    Selenium的使用流程:

    # 实例化web驱动 绑定对应的驱动程序   driverpath为本地驱动程序的路径
    web = webdriver.Chrome(executable_path="driverpath")
    
    # 发起请求
    web.get("url")
    
    # 获取页面数据
    page_text = web.page_source
    
    # 关闭浏览器
    web.quit()

    Selenium的方法:

    获取标签:

    find方法:

    # ============ find方法
    
    # 根据id、 ClassName、TagName查找元素  参数: (by=id/ClassName/TagName查找元素,value="")
    web.find_element()
    web.find_elements()
    
    # === 根据名字查找
    # 根据查找标签
    web.find_element_by_name()
    web.find_elements_by_name()
    # 根据属性类名查找标签
    web.find_element_by_class_name()
    web.find_elements_by_class_name()
    # 根据标签名查找标签
    web.find_element_by_tag_name()
    web.find_elements_by_tag_name()
    
    # 根据id名查找标签
    web.find_element_by_id()
    web.find_elements_by_id()
    
    
    # 根据超链接内容查找标签
    web.find_element_by_link_text()
    web.find_elements_by_link_text()
    
    # 根据超链接内容查找标签
    web.find_element_by_partial_link_text()
    web.find_elements_by_partial_link_text()
    
    # 根据xpath查找标签
    web.find_element_by_xpath('//div/td[1]')
    web.find_elements_by_xpath('//div/td[1]')

    页面操作:

    前进: web.forword() 

    后退: web.back() 

    应用实例:

    from selenium import webdriver
    from lxml import etree
    import time
    # 实例化web驱动 绑定对应的驱动程序
    web = webdriver.Chrome(executable_path="./chromedriver")
    # 发起请求
    web.get("http://125.35.6.84:81/xk")
    # 获取页面数据
    page_text = web.page_source
    # 解析企业信息
    tree = etree.HTML(page_text)
    li_list = tree.xpath("//ul[@id='gzlist']/li")
    
    for li in li_list:
        name = li.xpath('./dl/@title')[0]
        print(name)
    
    time.sleep(2)
    
    web.get("https://www.baidu.com/")
    time.sleep(2)
    # 返回浏览器上个页面
    web.back()
    time.sleep(2)
    
    # 前进浏览器下个页面
    web.forward()
    time.sleep(3)
    # 获取百度首页输入框
    search_input = web.find_element_by_id("kw")
    # 往输入框添加内容
    search_input.send_keys("美女")
    time.sleep(1)
    # 获取搜索按钮并点击进行搜索
    search = web.find_element_by_css_selector(".s_btn")
    search.click()
    
    time.sleep(5)
    # 关闭浏览器
    web.quit()

    Iframe和动作链处理

    什么是Iframe?

    Iframe是用于前端页面之间相互嵌套的一种方法,格式如下:

    <div id="iframewrapper">
      <iframe frameborder="0" id="iframeResult" style="height: 302.6px;">
        <html>
          <
    head>
          </
    head>
          <
    body>
          </
    body>
        </
    html>   </iframe> </div>

    在Selenium中处理"Iframe"中的标签,步骤如下:

    切换作用域:处理"Iframe"中的标签,必须先将作用域切换到“Iframe”:

    from selenium import webdriver
    from selenium.webdriver import ActionChains
    from lxml import etree
    import time
    # 实例化web驱动 绑定对应的驱动程序
    web = webdriver.Chrome(executable_path="./chromedriver")
    # 发起请求
    web.get("http://125.35.6.84:81/xk")
    # 切换到Iframe作用域
    web.switch_to.frame("iframe标签的id")

    动作链处理

    1、导入ActionChains模块,实例化action对象

    2、创建一个动作 绑定作用的标签

    3、调用方法执行动作的操作行为

    4、释放动作

    from selenium import webdriver
    from selenium.webdriver import ActionChains
    from lxml import etree
    import time
    # 实例化web驱动 绑定对应的驱动程序
    web = webdriver.Chrome(executable_path="./chromedriver")
    # 发起请求
    web.get("http://125.35.6.84:81/xk")
    # 切换到Iframe作用域
    web.switch_to.frame("iframe标签的id")
    # 实例化动作连对象
    action = ActionChains(web)
    # 使用动作
    action.click_and_hold("需要处理的Iframe中的标签")
    # 将标签进行移动 xoffset:水平方向距离  yoffset:垂直方向距离  perform:表示立即执行该动作的操作
    action.move_by_offset(xoffset="",yoffset=).perform()
    # 释放action
    action.release()

    qq空间登录实例

    from selenium import webdriver
    import time
    
    # 实例化浏览器对象 传入对应驱动
    web = webdriver.Chrome(executable_path="./chromedriver")
    
    # 发起请求
    web.get("https://qzone.qq.com/")
    
    # 切换到Iframe作用域
    web.switch_to.frame("login_frame")
    
    time.sleep(2)
    # 选择用户名密码登录
    username_login = web.find_element_by_id("switcher_plogin")
    username_login.click()
    
    time.sleep(2)
    # 获取用户名、密码输入框 并传入内容
    username_tag = web.find_element_by_id("u")
    password_tag = web.find_element_by_id("p")
    username_tag.send_keys("122342423")
    time.sleep(1)
    password_tag.send_keys("122342423")
    time.sleep(2)
    
    # 获取登录按钮 点击登录
    login_btn = web.find_element_by_id("login_button")
    login_btn.click()
    
    time.sleep(2)
    
    # 关闭浏览器
    web.quit()

    无头浏览器和 规避Selenium检测

    无头浏览器

    对于爬虫程序来说,我们不希望见到执行程序之后弹出一个浏览器页面,只需让它默默执行爬取操作。

    那如何不让其显示界面呢?

    1、导入模块:

    # 实现无可视化界面(无头浏览器)
    from selenium.webdriver.chrome.options import Options

    2、配置参数:

    # 实例化Options对象
    option = Options()
    # 添加参数
    option.add_argument("--headless")
    option.add_argument("--disable-gpu")

    3、将option传入浏览器对象中

    # 实例化浏览器对象 传入对应驱动
    web = webdriver.Chrome(executable_path="./chromedriver", chrome_options=option,)

    规避Selenium检测

    随着使用Selenium的热度节节攀升,许多门户网站 为了不让我们随意爬取页面动态数据,都对网站做了Selenium检测机制,也就是反爬机制

    正所谓上有政策,下有对策,反检测策略也就应运而生了:

    # 规避Selenium检测
    from selenium.webdriver import ChromeOptions
    
    option = ChromeOptions()
    option.add_experimental_option("excludeSwitches", ["enable-automation"])
    # 实例化浏览器对象 传入对应驱动
    web = webdriver.Chrome(executable_path="./chromedriver", chrome_options=chrome_option, options=option)
  • 相关阅读:
    算法与设计模式
    Python开源应用系统
    ASP.NET MVC配置Redis服务
    常用3个框架
    Visual Studio 2015 编译错误 File 的值+乱码的解决方法
    SQL Server2008 R2命令行启动及停止SQL服务的方法
    Linux Shell查看物理CPU个数、核数、逻辑CPU个数
    SQL SERVER 2008R2 执行大脚本文件时,管理工具提示“内存不足”的解决方法
    MVC中未能加载程序集System.Web.Http/System.Web.Http.WebHost
    Windows10中启用原来的Windows照片查看器方法
  • 原文地址:https://www.cnblogs.com/fanhua-wushagn/p/12968713.html
Copyright © 2011-2022 走看看