selenium合集

news2025/1/9 3:14:49

环境搭建步骤

  • 安装selenium
    pip install selenium

  • 安装浏览器

  • 安装浏览器驱动
    谷歌浏览器:chromdriver.exe
    ie浏览器:ieserverdriver.exe
    FireFox浏览器:geckodriver.exe
    特别注意⚠️:下载驱动版本必须与浏览器版本一致

    下载地址

  • 淘宝镜像:https://npmmirror.com/chromedriver

  • https://chromedriver.storage.googleapis.com/index.html

  • 火狐driver:​https://github.com/mozilla/geckodriver/releases

  • ie driver:​https://seleniumrelease.storage.googleapis.com/index.html

chromedriver.exe文件放置在python安装路径(python.exe所在路径)

mac环境下搭建selenium参考:https://www.cnblogs.com/hq0202/p/16273590.html
chrome 131版本驱动下载地址:https://googlechromelabs.github.io/chrome-for-testing/#stable


浏览器常用操作

driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
#浏览器最大化
driver.maximize_window()
#最小化
driver.minimize_window()
#指定窗口大小
driver.set_window_size(2000,800)
#浏览器前后退
driver.forward()
driver.back()

#浏览器标题及url,获取页面资源(断言)
print(driver.title,driver,current_url,driver.page_source)

#截图
driver.get_screenshot_as_file("保存图片路径")

#浏览器
driver.close()
driver.quit()

元素定位

driver.find_element_by_id()#通过id定位
driver.find_element_by_name()#通过name定位
driver.find_element_by_tag_name()#通过html标签定位,一般情况下不使用这个
driver.find_element_by_link_text()#通过链接文本定位,就是超链接的文本内容
driver.find_element_by_partial_link_text()#通过部分链接文本定位
driver.find_element_by_class_name()#通过类名定位

返回元素列表[]

driver.find_elements_by_partial_link_text()
driver.find_elements_by_id()#通过id定位
driver.find_elements_by_name()#通过name定位
driver.find_elements_by_class_name()#通过类名定位
driver.find_elements_by_tag_name()#通过html标签定位

xpath定位

绝对路径定位

使用浏览器右键复制绝对路径
绝对路径定位一般不要用,要考虑元素的稳定性

相对路径定位

//开头

  • 标签+索引定位
    //form/span[1]/input
  • 唯一定位标签+单个属性
    //form[@id=‘form’]/span[1]/input[@id=‘kw’]
  • 唯一定位标签+多个属性
    多个属性使用and
    //form[@id=‘form’ and @name=‘f’]/span[1]/input
  • 标签+部分属性定位
    //form/span[1]/input[substring(@class,3)=‘ipt’]
    //form/span[1]/input[contains(@class,‘ipt’)]
    //input[starts-with(@id,‘k’)]
  • 通过文本定位
    //a[text()=‘新闻’]

实例

路径表达式结果
bookstore选取 bookstore 元素的所有子节点
/bookstore选取根元素 bookstore。
bookstore/book选取属于 bookstore 的子元素的所有 book 元素。
//book选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang选取名为 lang 的所有属性。
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()< 3]选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素
//title[@lang=‘eng’]选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

chrome开发者工具定位元素:
在console中进行调试:
$x 可以通过xpath表达式进行定位
$$ 可以通过css选择器进行定位

调试常用操作:
修改元素的属性:$x(“xx”)[0].attr=“”
点击某个元素: $$(“xxx”)[0].click()

css定位

  • 通过绝对路径定位,一般不用
    driver.find_element_by_css_selector(“”)
  • 通过id定位
    driver.find_element_by_css_selector(“#kw”)
  • 通过class定位
    driver.find_element_by_css_selector(“.s_ipt”)
  • 通过属性定位
    driver.find_element_by_css_selector(“[autocompplete=‘off’]”)
    driver.find_element_by_css_selector(“[autocompplete=‘off’][class=‘s_ipt’]”)
  • 通过标签定位 标签名+属性/id/class定位
    driver.find_element_by_css_selector(“input#kw”)
    driver.find_element_by_css_selector(“input.s_ipt”)
    driver.find_element_by_css_selector(“input[autocompplete=‘off’]”)
  • 通过层级定位 层级之间通过>或者空格隔开
    driver.find_element_by_css_selector(“form>span>input”)
  • 通过兄弟节点定位
    场景:同一个元素下面有多个相同的元素
    第一个元素标签:first-child
    第n个元素标签:nth-child(n)
    最后元素标签:last-child
    driver.find_element_by_css_selector(“div#s-top-left>a:first-child”)

1.定位元素名为tag的元素:tag 对应于xpath ://tag

2.属性限制表达式

  • 拥有attr属性的任意元素 [attr] ----对应于xpath : //*[@attr]
  • 拥有attr属性的tag元素。tag[attr] ---- 对应于xpath: //tag[@attr]
  • attr=value [attr=value]---- 对应于xpath: //*[@attr=‘value’]
  • css没有用元素内容进行定位的选择器 xpath://tag[text()=“元素内容”]
例子描述
.intro选择class=intro的所有元素
#firstname选择id=firstname的所有元素
*选择所有元素
p选择所有

元素

div,p选择所有

的所有元素

div p选择所有
元素内部的所有

元素

div>p选择父元素为
元素的所有

元素

div+p选择紧接在
元素之后的所有

元素

[target]选择带有target属性所有元素
[target=_blank]选择targer=“_blank"的所有元素
p:nth-child(2)选择属于其父元素的第二个子元素的每个

元素

支持所有定位方式

from selenium.webdriver.common.by import By
driver.find_element(By.xpath,“xx”)


元素的常用操作

四大操作:

  • 点击 click()
  • 输入 send_keys()
  • 获取文本 text
  • 获取属性 get_attribute()

等待方式

直接等待

缺点:

  • 使用死板,难以衡量具体等待时间,有时间等待也解决不了问题

解决方案:在报错元素操作之前添加等待
原理:强制等待,线程休眠一段时间

隐式等待

隐式等待只能解决元素查找问题,不能解决元素交互问题
问题:难以确定元素加载的具体时间
原理:设置一个等待时间,轮询查找元素是否出现,如果没有出现就抛出异常

隐式等待无法解决的问题

  • 元素可以找到,使用点击等操作,出现报错
  • 原因:
    • 页面元素加载是异步加载过程,通常会html先加载完成,js,css其后
    • 元素存在与否是由html决定,元素的交互是由css或js决定
    • 隐式等待只关注元素能否找到,不关注元素能否点击或者进行其他的交互
  • 解决方案:使用显示等待

显示等待

WebDriverWait(driver实例, 最长等待时间, 轮询时间).until(结束条件)
原理:在最长等待时间内,轮询,是否满足结束条件


多窗口处理

  1. 先获取到当前窗口句柄(driver.current_window_handle)
  2. 再获取到所有的窗口句柄(driver.window_handles)最早打开的窗口在列表最前面
  3. 判断是否想要操作的窗口,如果是,就可以对窗口进行操作;如果不是就跳转到另一个窗口(driver.switch_to_window);

driver.switch_to_window(win[-1])//切换至最后一个窗口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2273545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

android开发从入门进阶到高级学习资料集合

本文精心整理了Android开发相关的学习资料&#xff0c;涵盖入门、进阶、性能优化、博客、面试和书籍等多个维度&#xff0c;在这里分享给大家&#xff0c;欢迎收藏。 技术社区 开源中国 OSCHINA是国内顶尖的开源技术社区之一&#xff0c;自2008年成立以来&#xff0c;已汇聚超…

腾讯云更改用户为root

最近买了台99元一年的2核的云服务器&#xff0c;方便学习一些java开发中间件&#xff0c;以及部署一些项目。 1.设置root用户密码 sudo passwd root 2.修改配置文件 ll /etc | grep ssh cd /etc/ssh/ ls vim sshd_config 输入/PasswordAuthentication 寻找 输入:set nu 再按下…

联发科MTK6771/MT6771安卓核心板规格参数介绍

MT6771&#xff0c;也被称为Helio P60&#xff0c;是联发科技(MediaTek)推出的一款中央处理器(CPU)芯片&#xff0c;可运行 android9.0 操作系统的 4G AI 安卓智能模块。MT6771芯片采用了12纳米工艺制造&#xff0c;拥有八个ARM Cortex-A73和Cortex-A53核心&#xff0c;主频分别…

Milvus×全诊通:从导诊到智能超声,如何将人效比翻倍

AI与智慧医疗的结合已是未来发展的必然趋势。近年来&#xff0c;国家卫健委推崇智慧医疗和AI技术&#xff0c;如智能导诊、预问诊、辅助诊断等&#xff0c;以提高医疗服务效率和诊断准确性&#xff0c;改善患者就医体验。 全诊通是一家专注于医疗SaaS和人工智能的公司&#xff…

C#使用MVC框架创建WebApi服务接口

第一步,使用VS2019新建MVC-Web API应用程序 创建BridgeApi 第二步,运行将生成默认的示例网页,网页Url为 https://localhost:44361/home/index 右键 项目 添加 WebAPI控制器类 添加 我们可以看到App_Start目录下 有三个文件: BundleConfig.cs代表 捆绑文件的引用 有脚本文件…

跨年烟花C++代码

嘿&#xff0c;朋友们&#xff01;今天来给大家讲讲一段挺有意思的C代码呀&#xff0c;这段代码主要是用来实现一个烟花效果展示的程序哦&#xff0c;下面咱们一点点来看哈。 效果 1. 开头包含的那些头文件 #include <graphics.h> #include <conio.h> #include &…

Unity 2d描边基于SpriteRender,高性能的描边解决方案

目标 以Unity默认渲染管线为例&#xff0c;打造不需要图片内边距&#xff0c;描边平滑&#xff0c;高性能的描边解决方案 前言 在2d游戏中经常需要给2d对象添加描边&#xff0c;来突出强调2d对象 当你去网上查找2d描边shader&#xff0c;移植到项目里面&#xff0c;大概率会…

自动驾驶相关知识学习笔记

一、概要 因为想知道SIL、HIL是什么仿真工具&#xff0c;故而浏览了自动驾驶相关的知识。 资料来源《自动驾驶——人工智能理论与实践》胡波 林青 陈强 著&#xff1b;出版时间&#xff1a;2023年3月 二、图像的分类、分割与检测任务区别 如图所示&#xff0c;这些更高阶的…

“深入浅出”系列之FFmpeg:(1)音视频开发基础

我的音视频开发大部分内容是跟着雷霄骅大佬学习的&#xff0c;所以笔记也是跟雷老师的博客写的。 一、音视频相关的基础知识 首先播放一个视频文件的流程如下所示&#xff1a; FFmpeg的作用就是将H.264格式的数据转换成YUV格式的数据&#xff0c;然后SDL将YUV显示到电脑屏幕上…

日志服务 SQL 引擎全新升级

作者&#xff1a;戴志勇、顾汉杰&#xff08;执少&#xff09; SQL 作为 SLS 基础功能&#xff0c;每天承载了用户大量日志数据的分析请求&#xff0c;既有小数据量的快速查询&#xff08;如告警、即席查询等&#xff09;&#xff1b;也有上万亿数据规模的报表级分析。SLS 作为…

20250107在WIN10下使用无线ADB连接Andorid7.1.2

connected to 192.168.3.217:5555 adb shell 20250107在WIN10下使用无线ADB连接Andorid7.1.2 2025/1/7 18:12 缘起&#xff1a;公司买了一台6000-7000&#xffe5;的地面站【Andorid7.1.2】&#xff0c;需要通过ifconfig命令来获取其中的网络信息。 虽然系统是VERY非常的陈旧&a…

浙江省自然资源厅:基于“浙里办”的自然资源移动政务服务创新实践——“浙里自然资源”

摘 要&#xff1a;本文基于浙江省自然资源移动政务服务的创新实践&#xff0c;设计和实现“浙里自然资源”应用&#xff0c;依托浙江省省域空间治理数字化平台特有的架构基础&#xff0c;在提升功能性和可用性、加强运营力度、丰富服务内容等方面采取了管理举措和技术创新。通…

使用 Jupyter Notebook:安装与应用指南

文章目录 安装 Jupyter Notebook1. 准备环境2. 安装 Jupyter Notebook3. 启动 Jupyter Notebook4. 选择安装方式&#xff08;可选&#xff09; 二、Jupyter Notebook 的基本功能1. 单元格的类型与运行2. 可视化支持3. 内置魔法命令 三、Jupyter Notebook 的实际应用场景1. 数据…

NeurIPS 2024 | 像素级LLM实现图像视频理解、生成、分割和编辑大统一(昆仑万维等)

Accepted by NeurIPS 2024 文章链接&#xff1a;https://arxiv.org/pdf/2412.19806 项目链接&#xff1a;https://vitron-llm.github.io/ Github链接&#xff1a;https://github.com/SkyworkAI/Vitron 亮点直击 首次提出了一种通用的视觉多模态大语言模型&#xff08;MLLM&…

嵌入式技术之Linux(Ubuntu) 一

一、Linux入门 1.硬件和操作系统以及用户的关系 一个传感器&#xff0c;获得数据后&#xff0c;需要向服务器发送数据。传感器传数据给上位机。 上位机需要一个程序来接收数据&#xff0c;那么这个上位机是什么机器&#xff1f; 我们的笔记本电脑就可以当成上位机。 两个手…

用户界面软件02

基于表单的用户界面 在“基于表单的用户界面”里面&#xff0c;用户开始时选中某个业务处理&#xff08;模块&#xff09;&#xff0c;然后应用程序就使用一系列的表单来引导用户完成整个处理过程。大型机系统上的大部分用户界面都是这样子的。[Cok97]中有更为详细的讨论。 面…

YOLOv8/YOLOv11改进 添加CBAM、GAM、SimAM、EMA、CAA、ECA、CA等多种注意力机制

目录 前言 CBAM GAM SimAM EMA CAA ECA CA 添加方法 YAML文件添加 使用改进训练 前言 本篇文章将为大家介绍Ultralytics/YOLOv8/YOLOv11中常用注意力机制的添加&#xff0c;可以满足一些简单的涨点需求。本文仅写方法&#xff0c;原理不多讲解&#xff0c;需要可跳…

【express-generator】05-路由中间件和错误处理(第一阶段收尾)

一、前言 上篇文章我们介绍了express-generator的请求体解析&#xff0c;重点讲了常用的请求体数据格式&#xff08;JSON/URL 编码的表单数据&#xff09;以及一个FILE文件上传&#xff0c;同时搭配代码示范进行辅助理解。 二、本篇重点 我们继续第一阶段的知识&#xff0c;…

python无需验证码免登录12306抢票 --selenium(2)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 [TOC](python无需验证码免登录12306抢票 --selenium(2)) 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 就在刚刚我抢的票&#xff1a;2025年1月8日…

深度学习驱动的蛋白质设计技术与实践

通过设计特定的蛋白质结构&#xff0c;可以实现预期的生物功能&#xff0c;如催化特定化学反应、识别和结合特定分子、调控生物信号传导等&#xff0c;为生物医学、药物研发、生物技术等领域提供重要工具和解决方案。传统的蛋白质设计方法主要依赖于已知蛋白质结构的同源建模、…