Selenium自动化测试工具
一 .Selenium简介
-
是一个用于Web应用程序测试的工具
Selenium的核心功能之一是测试软件在不同浏览器和操作系统上的兼容性,确保软件功能与用户需求的一致性,提升用户体验。
-
自动化脚本生成与执行
Selenium支持自动录制用户操作并生成多种编程语言的测试脚本,简化自动化流程,同时模拟用户行为执行JavaScript代码,处理动态加载内容。
-
解决反爬问题与验证码处理
Selenium能有效解决网页反爬策略,如模拟浏览器操作和执行JavaScript,对于难以通过请求库获取的数据,Selenium提供了更高效的解决方案,尽管需要注意资源消耗。
1.主要优势
(1)降低技术门槛
selenium的使用无需深入关注逆向参数,因为它模拟的是正常用户的操作,从而降低了自动化测试和数据抓取的技术门槛,使得非技术人员也能轻松上手。
(2)解决网页反爬问题
在爬虫领域,selenium通过模拟正常用户操作,能够有效绕过大部分网页的反爬机制,提高数据抓取的成功率和效率。
(3)自动化处理验证码
selenium在处理网站验证码方面具有优势,通过模拟正常用户行为,自动化处理验证码比逆向工程简单,提高了自动化流程的效率。
二. 安装与配置
1.安装Selenium
pip install
selenium==3.141.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
-
如果浏览器自动更新了
就会出现 驱动版本和浏览器版本不一致 更新一下驱动版本就好了
三. 基本使用方法
1.导包与实例化与浏览器控制
import timefrom selenium import webdriver# 实例化驱动
browser = webdriver.Chrome() # 单词C是大写的 后面的括号不能漏
browser.maximize_window() # 最大化
# browser.minimize_window() # 最小化
browser.set_window_size(500, 1000) # 自定义尺寸 宽500 高1000
browser.get("https://www.baidu.com/") # get方法 操作浏览器 打开对应的url页面
# 一个标签页 访问这两个url
browser.get("https://www.douban.com/")browser.back() # 后退 百度browser.forward() # 前进 豆瓣
time.sleep(2)
browser.refresh() # 刷新页面
time.sleep(2)
browser.save_screenshot("豆瓣.png")browser.close() # 关闭当前标签页 如果标签页只有一个 就会关闭浏览器
# browser.quit() #关闭浏览器
2.selenium的基本使用
from selenium import webdriver
Chrome浏览器 实例化
browser= webdriver.Chrome()
browser.get('url') #访问页面
browser.maximize_window() # 窗口最大化
browser.minimize_window() # 最小化到任务栏
browser.set_window_size(600,700) # 自定义大小 浏览器宽600 高700
browser.save_screenshot('image.png') # 当前窗口截图
以png后缀结尾 源码写的!!!
browser.refresh() # 刷新页面
browser.back() # 后退 浏览器左上角的回退按钮
browser.forward() # 前进 浏览器左上角的前进按钮
browser.close() # 关闭当前标签页
browser.quit() # 关闭浏览器。
3.元素定位
(1)ID定位
ID定位是利用元素的唯一ID属性来寻找页面上的元素。这种方法快速且精确,前提是元素的ID在页面中是唯一的,适用于直接通过ID访问元素的场景。
(2)class和name定位
class和name定位分别通过元素的class属性和name属性进行定位。这两种方法在处理具有相同样式或名称的多个元素时非常有用,可以一次性定位到多个元素。
(3)CSS选择器和XPath定位
CSS选择器和XPath定位提供了更高级的选项,允许通过CSS规则或XPath路径表达式来定位元素。它们灵活强大,能够处理复杂的页面结构,但需要更多的技术知识。
from selenium import webdriver
Chrome浏览器 实例化
browser= webdriver.Chrome()
browser.get('url') #访问页面
browser.find_element_by_id('id值') # ID定位
browser.find_element_by_class_name('class属性值') # class 定位
browser.find_element_by_name('name值') # name 定位
browser.find_element_by_css_selector('css选择器'). # css选择器定位
browser.find_element_by_xpath('xpath规则') # xpath定位
'''需求想让selenium 操作浏览器 去访问百度搜索 某个关键字的文字真人操作1: 访问百度2:搜索框 输入关键字 点击百度一下按钮自动化selenium:自动化是模拟真人的步骤1:访问百度页面2: 元素定位 定位到指定元素(标签) 在这个需求中 是要定位到输入框3: 输入框 输入对应的关键字4: 定位到百度一下这个元素 进行点击操作find_element 查找元素的方法 返回第一个符合条件的元素find_elements 查找元素的方法 查找所有的符合条件的元素 返回的是列表'''
from selenium import webdriver# 实例化驱动
browser = webdriver.Chrome() # 单词C是大写的 后面的括号不能漏# 1:访问百度页面
browser.get("https://www.baidu.com/")# 2: 元素定位 定位到指定元素(标签)
# 3: 输入框 输入对应的关键字 send_keys 指定位置 输入内容
browser.find_element_by_id("kw").send_keys("南风") # 传id的值
browser.find_element_by_class_name("s_ipt").send_keys("南风2") # 传class属性值
browser.find_element_by_name("wd").send_keys("南风3") # 传name属性的值
browser.find_element_by_xpath('//input[@id="kw"]') # 传xpath规则
browser.find_element_by_css_selector('#kw') # 传选择器值# 4: 定位到百度一下这个元素 进行点击操作
import time
browser.find_element_by_id("su").click() # click点击的方法
time.sleep(4)
# page_source返回响应的内容
print(browser.page_source)
4.selenium的其他方法
from selenium import webdriver
Chrome浏览器 实例化
browser= webdriver.Chrome()
browser.get('url') #访问页面
browser.title # 当前标签页标题
browser.current_url # 当前url
size 返回元素大小
text 获取元素的文本
get_attribute("xxx") 获取属性值;xxx:要获取的属性
is_displayed() 判断元素是否可见
is_enabled() 判断元素是否可用
注意
size、text、title、current_url:为属性,调用时无括号;如:xxx.size
title、current_url:使用浏览器实例化对象直接调用; 如:
browser.title
from selenium import webdriver# 实例化驱动
browser = webdriver.Chrome() # 单词C是大写的 后面的括号不能漏# 1:访问百度页面
browser.get("https://www.baidu.com/")
print(browser.title) # 当前标签页标题
print(browser.current_url) # 当前url
# find_element_by_id
print(browser.find_element_by_id('kw')) # 搜索框的元素
print(browser.find_element_by_id('kw').size) # 返回元素大小
content_element = browser.find_element_by_xpath('//span[@class="title-content-title"]')print(content_element.text)# 获取元素的文本
print(content_element.get_attribute('class'))
print(content_element.is_displayed()) # 判断元素是否可见
print(content_element.is_enabled()) # 判断元素是否可用
'''browser.title # 当前标签页标题browser.current_url # 当前urlsize 返回元素大小text 获取元素的文本get_attribute("xxx") 获取属性值;xxx:要获取的属性is_displayed() 判断元素是否可见is_enabled() 判断元素是否可用
'''
相关文章:
Selenium自动化测试工具
一 .Selenium简介 是一个用于Web应用程序测试的工具 Selenium的核心功能之一是测试软件在不同浏览器和操作系统上的兼容性,确保软件功能与用户需求的一致性,提升用户体验。 自动化脚本生成与执行 Selenium支持自动录制用户操作并生成多种编程语言的测…...
优化UVM环境(九)-将interface文件放在env pkg外面
书接上回: 优化UVM环境(八)-整理project_common_pkg文件 My_env_pkg.sv里不能包含interface,需要将my_intf.sv文件放在pkg之外...
mysql 主从安装
登录看第二篇 WINDOWS系统搭建MYSQL 8.0主从模式_windows mysql8.0.34主从配置-CSDN博客 Windows下MySQL8.0最新版本超详细安装教程_windowsserver安装mysql8.0-CSDN博客 启动两个服务 可执行文件路径一致问题解决: windows,同一台机器安装两个mysq…...
【C++刷题】力扣-#121-买卖股票的最佳时机
题目描述 给定一个数组 prices,其中 prices[i] 表示第 i 天的股票价格。假设你可以在第 i 天买入并在第 j 天卖出股票(i ≤ j),设计一个算法来计算你所能获取的最大利润。注意你只能持有一股股票,并且你不能同时参与多…...
Python量化交易(二):金融市场的基础概念
引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月学习赛的Python量化交易学习总结文档;在现代社会中,投资已成为个人、机构和政府追求财富增长和资源配置的重要方式。…...
Java方法的递归调用
Java中的方法可以通过调用自身来实现递归调用。 递归调用在解决一些问题时非常有用,特别是那些可以分解为相同结构的子问题的情况。递归调用可以让问题的解决过程更加简洁和优雅。 下面是一个简单的示例,展示了如何使用递归调用来计算一个数字的阶乘&a…...
JavaScript 第30章:综合项目
看起来您想要了解如何在一个JavaScript为主的项目中进行项目规划、技术选型、开发流程以及维护等方面的内容,并且希望结合Java的源代码来进行详细的讲解。不过,JavaScript和Java是两种不同的编程语言,通常它们的应用场景也不同。JavaScript 主…...
GB/T28181-2022规范解读、应用场景和技术实现探究
GB/T28181-2022和GB/T28181-2016区别 GB/T28181-2022《公共安全视频监控联网系统信息传输、交换、控制技术要求》与 GB/T28181-2016 相比,主要有以下区别: 术语和定义方面: 术语删减:GB/T28181-2022 删除了 “联网系统信息”“数…...
Docker容器间链路管理
Docker容器是一个轻量级的、可移植的软件打包技术,它允许开发者将应用程序及其依赖项打包到一个独立的容器中,然后发布到任何支持Docker的环境中运行。容器是完全使用沙箱机制,相互之间不会有任何接口,容器性能开销极低。 可以将…...
python画图|在三维空间的不同平面上分别绘制不同类型二维图
【1】引言 前序已经完成了基础的二维图和三维图绘制教程探索,可直达的链接包括但不限于: python画图|3D参数化图形输出-CSDN博客 python画三角函数图|小白入门级教程_正余弦函数画图python-CSDN博客 在学习过程中,发现一个案例࿱…...
与ai一起作诗(《校园清廉韵》)
与ai对话犹如拷问自己的灵魂,与其说ai助力还不如说在和自己对话。 (笔记模板由python脚本于2024年10月19日 19:18:33创建,本篇笔记适合喜欢python和诗歌的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free&…...
python matplotlib
一、图形函数 函数名称描述Bar绘制条形图Barh绘制水平条形图Boxplot绘制箱型图Hist绘制直方图his2d绘制2D直方图Pie绘制饼状图Plot在坐标轴上画线或者标记Polar绘制极坐标图Scatter绘制x与y的散点图Stackplot绘制堆叠图Stem用来绘制二维离散数据绘制(又称为火柴图&…...
秋招面试题记录_半结构化面试
c八股(可能问的多一点) 1.简单说说C11语法特性 答: 1.auto以及decltype自动类型推导,避免手动声明复杂类型,减少冗长代码提升了可读性和安全性。 2.智能指针 自动释放内存 (具体说说) 有shared和unique 差异主要体现在所有权、内存开销、…...
Java项目-基于springboot框架的疫苗接种管理系统项目实战(附源码+文档)
作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…...
Android 12.0进程保活白名单功能实现
在Android 12.0系统中,实现进程保活白名单功能是为了确保某些重要的应用程序即使进入后台也能长时间保持运行状态,不被系统自动杀死。这一功能的实现涉及多个核心类和文件,以下是具体的实现步骤和核心功能分析: 一、实现步骤 …...
vscode 功能、设置备忘
2024年10月18日 crtl p 按文件名搜索,输入> 开始搜索命令 设置文件显示过滤和搜索过滤: ctrlp 输入 >settings 选择Preferences:Open Settings(UI),搜索exclude 配置 Files Exclude 修改显示过滤 配置 Search Exclude 修…...
错误 Failed to connect to xx.xx.xx.xx port xx: No route to host
Failed to connect to xx.xx.xx.xx port xx: No route to host 系统环境: Oracle Cloud(OCI)Ubuntu20.4 问题: 连接本机IP正常访问,连接内网ip可正常访问,但连接外网IP报错:Failed to conne…...
Redis环境的搭建
Redis环境的搭建可以分为Linux系统和Windows系统两种情况。 一、Linux系统下Redis的搭建 1. 安装前准备 确保Linux系统已安装GCC环境,可以使用yum install gcc-c命令安装。下载Redis安装包,例如redis-6.2.6.tar.gz,并将其上传到Linux服务器…...
Git Push(TODO)
最近经常碰到GIT push不上去的问题。到处求人解决也真是尴尬,想自己看看,所以刚刚在github上建了一个仓,试了下。结果如下: 暂时可能还不行,因为数据都是加密的,没法看到具体GIT的交互信息。。。 后面再想办…...
Java工具类--截至2024常用http工具类分享
1. Apache HttpClient Apache HttpClient是一个功能强大的、灵活的HTTP客户端,用于发送请求和接收响应。它支持HTTP/1.1和HTTP/2协议,并且提供了丰富的配置选项。适用于需要高度可配置性和扩展性的场景。 2.OkHttp OkHttp是一个高效的HTTP客户端&…...
C语言变长数组原理与工程实践指南
C语言变长数组的工程实践与应用解析1. 变长数组技术背景1.1 ANSI C与C99标准对比传统ANSI C标准要求数组长度必须在编译时确定,定义方式如下:int a[10]; // 合法,长度为编译时常数C99标准引入变长数组(VLA)特性,允许数组长度在运…...
终极指南:使用golang-migrate轻松管理数据库视图与存储过程
终极指南:使用golang-migrate轻松管理数据库视图与存储过程 【免费下载链接】migrate golang-migrate/migrate:这是一个基于Go语言的数据迁移库,适合进行数据库迁移和数据同步。特点包括简单易用、支持多种数据库类型、支持自定义迁移脚本等。…...
腾讯云GPU服务器上,手把手教你5分钟搞定Isaac Sim 5.0环境(附VNC黑屏自救指南)
腾讯云GPU服务器5分钟极速部署Isaac Sim 5.0全攻略 在机器人仿真与AI训练领域,NVIDIA Isaac Sim已成为行业标杆工具。但许多开发者在云端部署时,往往耗费数小时甚至数天时间卡在环境配置环节。本文将基于腾讯云GPU服务器,分享一套经过实战验证…...
国密SM4算法在Web与Java应用中的跨平台加解密实战
1. 国密SM4算法简介与应用场景 国密SM4算法是我国自主设计的分组对称加密算法,于2012年成为国家密码行业标准(GM/T 0002-2012)。作为替换国际算法(如AES)的重要选择,SM4在金融、政务、物联网等领域得到广泛…...
Comsol瓦斯抽采:多物理场耦合的奇妙探索
comsol瓦斯抽采 该案例涉及有效应力场,瓦斯渗流场等多物理场耦合。 包括钻孔瓦斯抽采模型,热流固耦合模型,顺层瓦斯抽采模型,注氮驱替瓦斯模型,水力压裂模型,三轴裂隙岩体渗流应力耦合,采空区瓦…...
告别纸上谈兵:用Wireshark抓包实战分析FlexRay帧格式(含CRC校验)
实战解析FlexRay帧格式:用Wireshark抓包验证CRC与网络管理向量 车载工程师们常遇到这样的困境:明明熟读FlexRay协议文档,面对真实总线数据时却无从下手。本文将带您用Wireshark完成从抓包到解析的全流程实战,重点破解Header CRC校…...
量子力学的抽象地位与c语言等价
多种量子/粒子的各种表象,就像 cpu 的微架构指令集,量子力学的状态矢量表示和密度矩阵表示就像c语言。 中间从状态矢量到具体粒子的具体表象的转换,就像是一个编译器的工作。量子力学表象与编译器架构的深刻类比这个类比非常精妙且深刻&#…...
3步突破AI工具限制:开源解决方案全解析
3步突破AI工具限制:开源解决方案全解析 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Youve reached your trial request limit. / Too many free trial accounts used on this machine. Please upgrade to pro. We have this limi…...
Jupyter Notebook文件损坏?3种方法快速恢复.ipynb中的代码(附Python脚本)
Jupyter Notebook文件损坏?3种方法快速恢复.ipynb中的代码(附Python脚本) 当你在深夜赶数据分析报告时突然断电,重启后发现Jupyter Notebook文件无法打开——这种绝望感每个数据工作者都懂。.ipynb文件损坏并非世界末日࿰…...
BetterJoy终极指南:3大难题快速解决Switch控制器PC连接问题
BetterJoy终极指南:3大难题快速解决Switch控制器PC连接问题 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode…...
