码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • selenium模块


    目录

    selenium是什么

    selenium安装

    使用selenium打开浏览器

    使用selenium访问页面

    使用selenium获取网页中的某个节点

    使用selenium对某个节点交互

    获取某个节点的属性

    使用selenium运行js代码

    使用selenium对标签页的操作

    switch_to切换frame标签

    selenium对cookie的处理

    设置元素等待

     使用selenium前进或后退

    selenium相关设置

    使用selenium关闭浏览器


    selenium是什么

    Selenium 是最广泛使用的开源 Web UI(用户界面)自动化测试套件之一。Selenium 支持的语言包括C#,Java,Perl,PHP,Python 和 Ruby。目前,Selenium Web 驱动程序最受 Python 和 C#欢迎。 Selenium 测试脚本可以使用任何支持的编程语言进行编码,并且可以直接在大多数现代 Web 浏览器中运行。在爬虫领域 selenium 同样是一把利器,能够解决大部分的网页的反爬问题。下面就进入正式的 study 阶段。

    selenium安装

    pip install selenium
    

    使用selenium打开浏览器

    1. # 声明浏览器对象
    2. # 导入selenium模块
    3. from selenium import webdriver # webdriver 网络驱动
    4. chrome = webdriver.Chrome() # 谷歌浏览器
    5. firefox = webdriver.Firefox() # 火狐浏览器
    6. edge = webdriver.Edge() # Edge浏览器
    7. phantomjs = webdriver.phantomjs() # phantomjs浏览器
    8. safari = webdriver.Safari() # 苹果浏览器

    使用webdriver方法声明浏览器对象,会返回一个浏览器对象,后面所有的操作都是在此对象上进行操作的。

    需要注意的是,在使用selenium打开浏览器前,需要下载相对应的浏览器驱动才能使用,下载教程网上有很多,这里就不过多介绍了。

    使用selenium访问页面

    chrome.get(url)

    使用get方法向某个url发送get请求。

    使用selenium获取网页中的某个节点

    在最新版本中,使用selenium获取节点只有两个方法

    • find_element()
    • find_elements()

    需要传入两个参数,第一个参数为使用哪个方法进行查找,第二个参数表示具体的值。

    支持使用使用下列方法获取节点:

    1. ID = "id"
    2. XPATH = "xpath"
    3. LINK_TEXT = "link text"
    4. PARTIAL_LINK_TEXT = "partial link text"
    5. NAME = "name"
    6. TAG_NAME = "tag name"
    7. CLASS_NAME = "class name"
    8. CSS_SELECTOR = "css selector"
    • by_link_text和by_partial_link_tex的区别:全部文本和包含某个文本  

    如:

    1. from selenium.webdriver.common.by import By
    2. input = browser.find_element(By.ID, "q")

    find_element和find_elements的区别:

    • 多了个s就返回列表,没有s就返回匹配到的第一个标签对象

    • find_element匹配不到就抛出异常,find_elements匹配不到就返回空列表

    使用selenium对某个节点交互

    • 清空文字 clear方法
    • 输入文字 send_keys方法
    • 点击按钮 click方法

    获取某个节点的属性

    • get_attribute('属性名')
      • 获取某个属性值
    • text

      • 获取文本值

    • location

      • 获取该节点在页面的相对位置

    • tag_name
      • 获取标签名称
    • size

      • 获取节点的大小,也就是宽和高

    • page_source

      • 获取页面源代码

    使用selenium运行js代码

    execute_script('js代码')

    使用selenium对标签页的操作

    • window_handles
      • 获取全部标签页,为一个列表
    • switch_to.window('标签')

      • 跳转到某个标签。

    一般这两个方法是同时使用的,先获取到全部标签页,然后通过索引指定跳转到某个标签页

    switch_to切换frame标签

    iframe是html中常用的一种技术,也就是一个页面中嵌套了另外一个网页,selenium默认是访问不了frame中的内容的

    解决方法:

    • switch_to.frame(iframe节点元素)

    需要注意的是,使用该方法后跳转到frame标签内容后,是无法获取frame标签外的元素的,需要获取当前标签页的句柄,然后切换到该句柄才可以获取frame标签外的元素

    selenium对cookie的处理

    • get_cookies()
      • 获取cookie,返回的是一个列表, 其中包含的就是完整的cookie信息
    • delete_cookie("需要删除的名字")

      • 删除某一条cookie

    • delete_all_cookies()

      • 删除全部cookie

    设置元素等待

    很多页面都使用 ajax 技术,页面的元素不是同时被加载出来的,为了防止定位这些尚在加载的元素报错,可以设置元素等来增加脚本的稳定性。webdriver 中的等待分为 显式等待 和 隐式等待。

    • 隐式等待
      • implicitly_wait('int')

    默认时间为0  如果selenium没有在DOM中找到节点,将继续等待,超出设定时间后,则抛出找不到节点的异常,并且隐式等待是全局性的,即运行过程中,如果元素可以定位到,它不会影响代码运行,但如果定位不到,则它会以轮询的方式不断地访问元素直到元素被找到,若超过指定时间,则抛出异常。

    • 显式等待
      • WebDriverWait(driver, timeout)
      • driver:浏览器驱动

      • timeout:超时时间,单位秒

    设置一个超时时间,每个一段时间就去检测一次该元素是否存在,如果存在则执行后续内容,如果超过最大时间(超时时间)则抛出超时异常

    引入WebDriverWait对象,指定最长等待时间,然后调用它的until方法,传入要等待的条件expected_conditions,如:

    1. driver = webdriver.Chrome()
    2. driver.get("https://www.taobao.com/")
    3. wait = WebDriverWait(driver, 10)
    4. input1 = wait.until(EC.presence_of_element_located((By.ID, "q")))

     使用selenium前进或后退

    • back()
      • 后退

    • forward()
      • 前进

    selenium相关设置

    1. # 实例化配置对象
    2. options = webdriver.ChromeOptions() # 创建一个配置对象
    3. options.add_argument('--headless') # 开启无界面模式
    4. options.add_argument("--disable-gpu") # 禁用gpu
    5. options.add_argument("--proxy-server=http://202.20.16.82:9527") # 使用代理ip
    6. options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36")# 设置useragent
    7. # 添加配置对象
    8. driver = webdriver.Chrome(chrome_options=options)

    使用selenium关闭浏览器

    • close()
      • 关闭当前标签页
    • quit()
      • 关闭浏览器

    有关selenium更多详细操作看下面链接

    selenium用法详解【从入门到实战】【Python爬虫】【4万字】_Dream丶Killer的博客-CSDN博客_seleniumicon-default.png?t=M666https://blog.csdn.net/qq_43965708/article/details/120658713?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165905672916781818722727%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165905672916781818722727&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-120658713-null-null.142^v35^experiment_28w_v1&utm_term=selenium&spm=1018.2226.3001.4187

  • 相关阅读:
    mysql安装,安装mysql配置教程(超级详细图解)
    JDBC执行Oracle的Sql脚本注意细节
    2022-2028年全球与中国便携式茶包市场现状及未来发展趋势分析报告
    《windows 程序设计》读书笔记 一
    想当领导,有哪些能力是需要培训的?
    java教育机构管理计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    深眸科技聚焦3D机器视觉技术,从技术形态到应用前景实现详细分析
    SpringBoot 配置
    第六话、当你因为颜值被入取
    【java进阶02:抽象类和接口】类与类之间的关系 抽象类与接口的区别
  • 原文地址:https://blog.csdn.net/HHYZBC/article/details/126052028
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号