selenium合集
环境搭建步骤
-
安装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(结束条件)
原理:在最长等待时间内,轮询,是否满足结束条件
多窗口处理
- 先获取到当前窗口句柄(driver.current_window_handle)
- 再获取到所有的窗口句柄(driver.window_handles)最早打开的窗口在列表最前面
- 判断是否想要操作的窗口,如果是,就可以对窗口进行操作;如果不是就跳转到另一个窗口(driver.switch_to_window);
driver.switch_to_window(win[-1])//切换至最后一个窗口
相关文章:
selenium合集
环境搭建步骤 安装selenium pip install selenium 安装浏览器 安装浏览器驱动 谷歌浏览器:chromdriver.exe ie浏览器:ieserverdriver.exe FireFox浏览器:geckodriver.exe 特别注意⚠️:下载驱动版本必须与浏览器版本一致 下载地址 淘宝镜像࿱…...
JVM生产环境常用参数配置及调优建议
一、生产常用参数配置 JAVA_OPTS"-server -Xms3000m -Xmx3000m -Xmn1500m -XX:UseG1GC -XX:ConcGCThreads8 -XX:PrintGCDetails -XX:PrintGCTimeStamps -Xloggc:./g1-gc.log -XX:MaxMetaspaceSize256m -XX:-UseGCOverheadLimit -XX:UseCompressedOops -XX:HeapDumpOnOu…...
Spring Boot 3 实现 MySQL 主从数据库之间的数据同步
✅ Spring Boot 3 实现 MySQL 主从数据库之间的数据同步 在实际项目中,为了提高 系统的读性能 和 数据的可用性,通常会使用 主从数据库架构。Spring Boot 提供了对 多数据源 的良好支持,可以轻松配置 主从数据库 的数据同步,实现…...

【小程序开发】- 小程序版本迭代指南(版本发布教程)
一,版本号 版本号是小程序版本的标识,通常由一系列数字组成,如 1.0.0、1.1.0 等。版本号的格式通常是 主版本号.次版本号.修订号 主版本号:当小程序有重大更新或不兼容的更改时,主版本号会增加。 次版本号:…...
MySQL 间隙锁避免“可重复读”出现“幻读”
在数据库事务处理中,可重复读(Repeatable Read)是一个常用的隔离级别,但其默认行为可能导致幻读现象。然而,在 MySQL 的实现中,通过 **间隙锁(Gap Lock)**机制,能够避免幻…...

揭秘区块链隐私黑科技:零知识证明如何改变未来
文章目录 1. 引言:什么是零知识证明?2. 零知识证明的核心概念与三大属性2.1 完备性(Completeness)2.2 可靠性(Soundness)2.3 零知识性(Zero-Knowledge) 3. 零知识证明的工作原理4. 零…...
JavaWeb开发:从入门到精通
近年来,JavaWeb开发已经成为了互联网开发领域的重要技术之一。无论是大型企业还是个人项目,都离不开JavaWeb开发。本文将为您介绍JavaWeb开发的基本概念、常用技术和开发流程,帮助您快速入门并掌握这一技术。 一、JavaWeb开发的基本概念 Jav…...

2025年01月07日Github流行趋势
项目名称:khoj 项目地址url:https://github.com/khoj-ai/khoj项目语言:Python历史star数:20105今日star数:363项目维护者:debanjum, sabaimran, MythicalCow, aam-at, shantanuSakpal项目简介:你…...

c#集成npoi根据excel模板导出excel
NuGet中安装npoi 创建excel模板,替换其中的内容生成新的excel文件。 例子中主要写了这四种情况: 1、替换单个单元格内容; 2、替换横向多个单元格; 3、替换表格; 4、单元格中插入图片; using System.IO; …...

Vue2移动端(H5项目)项目封装switch组件支持动态设置开启关闭背景色、值及组件内显示文字描述、禁用、switch 的宽度
前言 近期产品需求:Vue2移动端项目需要在switch开关内显示文字,看Vantui没有对应功能,因此自己手撸写了这个组件。 一、最终效果 二、参数配置 1、代码示例: <t-switch v-model"check"/>2、配置参数(…...
MATLAB语言的语法糖
MATLAB语言的语法糖 引言 在编程语言的发展历程中,语法糖(Syntactic Sugar)被广泛提及。它指的是一种编程语言的语法特性,旨在使代码更易读、更易写,虽然这些特性并不增加语言的表达能力,但能使程序员的生…...

数字IC设计高频面试题
在数字IC设计领域,面试是评估候选人技术能力和问题解决能力的重要环节。数字IC设计的复杂性和要求在不断提高。面试官通常会提出一系列面试题,以考察应聘者在数字设计、验证、时钟管理、功耗优化等方面的专业知识和实践经验。 这些题目不仅涉及理论知识…...
OpenCV 4.5至4.10版本更新概述
OpenCV 4.5至4.10版本更新概述 OpenCV 从 4.5 到 4.10 版本的更迭中,每个版本都引入了新功能、优化和修复。以下是主要版本的更新内容概述: OpenCV 4.5.x 系列 4.5.0 (2020年10月) 新增对 YOLOv4 的支持。引入 DNN 模块的改进,包括对 ONNX …...
OSPF - LSA对照表
LSA的三要素,如何唯一表示一条LSA Type:表示是几类的LSA Link-id:这个比较特殊,不同的LSA的Link-ID不同 Advertising router:谁产生的LSA 常用的就是1、2、3、4、5、7型LSA 点击蓝字跳转LSA详细介绍(持续更新中…...

游戏引擎学习第77天
仓库: https://gitee.com/mrxiao_com/2d_game 回顾昨天的 bug 今天我们继续开发进度,进行调试昨天代码的问题,主要是关于如何跟踪玩家和敌人在世界中的高度位置。虽然我们做的是一款 2D 游戏,但我们希望能够处理多层的房间,玩家…...

【项目实战1】五子棋游戏
目录 C语言编程实现五子棋:: game.h game.c 1.打印菜单 2.打印棋盘 3.玩家下棋 4.判断五子连珠 5.判断输赢 6.游戏运行 game.c完整源代码展示 test.c C语言编程实现五子棋:: game.h #pragma once #include<stdio.h> …...
HTML5 动画效果:淡入淡出(Fade In/Out)详解
HTML5 动画效果:淡入淡出(Fade In/Out)详解 淡入淡出(Fade In/Out)是一种常见的动画效果,使元素逐渐显现或消失,增强用户体验。以下是淡入淡出的详细介绍及实现示例。 1. 淡入淡出的特点 平滑…...
Conmi的正确答案——Cordova使用“src-cordova/config.xml”编辑“Android平台”的“uses-permission”
Cordova版本:12.0.0 (cordova-lib12.0.1) 1、配置例程: <platform name"android"><config-file target"AndroidManifest.xml" parent"/manifest"><uses-permission android:name"android.permission…...

在Mysql环境下对数据进行增删改查
一、插入数据: insert into 表名 [(字段名)] values (字段对应的值1,字段对应的值2,…)[,(字段对应的值1,字段对应的值2,…)]; insert into students (id,name,age,height,gender,cls_id,is_delete) values (0,小明,18,180.00,2,1,0)在学生表中插入“小明”数据的…...

Spring 设计模式:经典设计模式
Spring 设计模式:经典设计模式 引言 Spring 框架广泛使用了经典设计模式。 这些模式在 Spring 内部发挥着重要作用。 通过理解这些设计模式在 Spring 中的应用,开发者可以更深入地掌握 Spring 框架的设计哲学和实现细节。 经典设计模式 控制反转&am…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...