0
点赞
收藏
分享

微信扫一扫

python之selenium模块【操纵浏览器】

Soy丶sauce 2022-01-31 阅读 112

selenium模块

  • 为什么需要使用selenium模块?
    • selenium可以更快捷的获取网站中动态加载的数据
    • 便捷的实现模拟登录
  • 什么是selenium模块?
    • 基于浏览器自动化的一个模块
  • selenium使用
    • 环境安装:pip install selenium
    • 下载一个浏览器的驱动程序
      • https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/(edge浏览器)
      • 可以自己查找对应浏览器的驱动下载网站
    • 实例化一个selenium对象
    • 编写浏览器自动化代码
    • 初始用
    from selenium import webdriver
    from lxml import etree
    from time import sleep
    # 实例化一个浏览器对象(传入浏览器的驱动器)
    # 直接写路径也行,也可以不用写
    # bro=webdriver.Edge('msedgedriver.exe')
    bro=webdriver.Edge('msedgedriver.exe')
    # 让浏览器发起一个指定url对应请求
    bro.get('http://scxk.nmpa.gov.cn:81/xk/')
    # 获取浏览器当前页面的页面源码数据
    page_text=bro.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)
    # 睡眠5秒后关闭浏览器
    sleep(5)
    bro.quit()
    
    • 相关基础语法
      • 发起请求:get()
        • 在selenium对象发送请求时的url必须带上超文本协议前缀
      • 标签定位:find系列方法
      • 标签交互:send_keys(‘xxx’)
      • 执行js程序:excut_script(‘就js代码’)
      • 前进、后退:forward()、back()
      • 关闭浏览器:quit()
    • 实战之操纵淘宝
    from selenium import webdriver
    from time import sleep
    bro=webdriver.Edge()
    bro.get('https://www.taobao.com/')
    # 标签定位
    serch_input=bro.find_element_by_id('q')
    # 标签交互,搜索框输入内容
    serch_input.send_keys('Iphone')
    # 执行一组js程序
    # 向下滚动
    bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
    btn=bro.find_element_by_css_selector('.btn-search')
    # 点击搜索按钮
    btn.click()
    bro.get('https://www.baidu.com')
    # 后退
    sleep(2)
    bro.back()
    # 前进
    sleep(2)
    bro.forward()
    sleep(5)
    bro.quit()
    
  • selenium处理iframe以及动作链
    • 如果定位的标签在iframe中则必须要使用switch_to.frame(‘id’)
    • 动作链(拖动):from selenium.webdriver import ActionChains导入动作链包
      • 实例化一个动作链对象
        • action=ActionChains(bro)
      • 触发长按且点击操作
        • action.click_and_hold(div)
      • 进行拖动
        • action.move_by_offset(17,10)
      • 动作立即执行
        • perform()
      • 释放动作链
        • action.release()
    • 实操:
    from selenium import webdriver
    from time import sleep
    # 导入动作链的类
    from selenium.webdriver import ActionChains
    bro=webdriver.Edge()
    bro.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
    # 如果要定位的标签在iframe标签中,则进行操作
    bro.switch_to.frame('iframeResult')# 切换定位的作用域
    div=bro.find_element_by_id('draggable')
    # 动作链
    action=ActionChains(bro)
    # 点击长安指定的标签
    action.click_and_hold(div)
    for i in range(5):
        # perform()立即 执行动作链操作
        action.move_by_offset(17,10).perform()
        sleep(0.2)
    # 释放动作链
    action.release()
    bro.quit()
    
    • 模拟登录
    • 实战之QQ空间登录
    from selenium import webdriver
    from time import sleep
    bro=webdriver.Edge()
    bro.get('https://qzone.qq.com/')
    bro.switch_to.frame('login_frame')
    a_tag=bro.find_element_by_id("img_out_2609320777")
    a_tag.click()
    
    • 无头浏览器和规避检测
    from selenium import webdriver
    from time import sleep
    # 实现无可视化界面
    # 实现规避检测
    from selenium.webdriver.edge.options import Options
    edge_options=Options()
    edge_options.add_argument('--headless')
    edge_options.add_argument('--disable-gpu')
    # 如何实现让selenium规避被检测到的风险
    edge_options.add_experimental_option('excludeSwitches',['enable-automation'])
    bro=webdriver.Edge(options=edge_options)
    # 无可视化界面(无头浏览器),phantomJs
    bro.get('https://baidu.com')
    print(bro.page_source)
    bro.quit()
    
举报

相关推荐

0 条评论