当前位置: 首页 > news >正文

Web自动化——python

文章目录

  • 1.八大元素定位
  • 2.元素基本操作
  • 3.浏览器常用操作
  • 4.获取元素信息的常用方法
  • 5.鼠标和键盘相关操作
  • 6.元素等待
    • 1.隐式等待
    • 2.显示等待
  • 7.下拉选择框
  • 8.弹出框
  • 9.滚动条操作
  • 10.==frame表单的切换==
  • 11.==多窗口切换==
  • 12.==窗口截图、验证码处理==

1.八大元素定位

 元素属性定位:id、name、class_name元素标签定位:tag_name超链接定位:link_text、paratial_link_text元素路径定位:XPathcss选择器定位:CSS

1.如果一次性定位一组元素,用find_elements,使用find_element会报错

2.元素基本操作

1.点击:click()
2.输入内容:send_keys()
3.清除:clear()

3.浏览器常用操作

1.浏览器最大化:maximize_window()
2.设置浏览器窗口大小:set_window_size(weigth,height)
3.设置浏览器窗口位置:set_window_position(x,y)
4.浏览器后退:back()
5.浏览器前进:forword()
6.浏览器刷新:refresh()
7.关闭当前窗口:close()   关闭的一般是主窗口
8.关闭驱动对象:quit()
9.获取页面title:title  获取的一般是主页面
10.获取当前页面的url:current_url   获取的一般是主页面

不切换窗口时,7 9 10都是操作的主窗口

4.获取元素信息的常用方法

1.获取元素大小:size
2.获取元素文本:text
3.获取属性值:get_attribute("xxx")   传递的参数是元素的属性名   判断一组元素是否是我们想要的值

在特殊应用场景中使用:

4.判断元素是否可见:is_displayed()  例如:element.is_display()
5.判断元素是否可用:is_enabled()   是否可以点击
6.判断元素是否被选中:is_selected()    用来检查复选框或者单选框的按钮是否被选中

5.鼠标和键盘相关操作

在selenium中将鼠标相关的操作封装在ActionChains,这些操作必须结合perform()执行
action = ActionChains(driver)

1.点击:click()
2.右击:context_click(element)
3.双击:double_click(element)
4.悬停:move_to_element(element)
5.拖拽:drag_and_drop(source,target)
6.执行:perform()

键盘相关操作:
selenium将键盘相关的操作都封装在Keys类中

1.删除键:send_keys(Keys.BACK_SPACE)   BackSpace
2.空格键:send_keys(Keys.SPACE)
3.制表键:send_keys(Keys.TAB)
4.回退键(ESC):send_keys(Keys.ESCAPE)
5.回车键:send_keys(Keys.ENTER)
6.全选:send_keys(Keys.CONTROL,'a')
7.复制:send_keys(Keys.CONTROL,'c')
8.上传文件:send_keys(上传文件的路径)

6.元素等待

1.为什么要设置元素等待?
由于电脑配置原因或者网络配速问题,在查找元素时未被第一时间加载出来,会抛出未找到该元素的异常


2.什么是元素等待?
元素在第一次未被找到时,元素等待设置的时长被激活,如果在设置的有效时长内找到元素就会继续执行代码,否则抛出未找到元素异常

1.隐式等待

隐式等待方法:

driver.implicitly_wait(timeout)

1.隐式等待是全局设置,设置一次应用于全局
2.一般情况下是前置必写代码

2.显示等待

selenium把显示等待的相关操作封装在WebDriverWait类中

WebDriverWait(driver,timeout,poll_frequency)
1.driver:浏览器驱动对象
2.timeout:超时的时长
3.poll_frequency:检测间隔的时间,默认是0.5s
element = WebDriverWait(driver,10,1).until(lambda x:x.find_element(By.ID,"ID"))

7.下拉选择框

标签:<select>

1.通过css定位(直接定位option)
2.通过使用select类来控制(控制父类)

select= Select(element)
select.by_index()  下标,从0开始
select.by_value()  根据value定位
select.by_visible_text(text) 根据文本定位

注意:
1.实例化select时,需要参数为select标签元素
2.调用select类下面的的方法,只通过索引、value属性值、显示文本去控制的,不需要click事件

8.弹出框

1.alert:警告框
2.confirm:确认框
3.prompt:提示框

对弹出窗一定要进行处理接下来的代码才能够运行,否则接下来的代码不生效
如何处理对话框?

1.获取弹出窗对象:alert = driver.switch_to.alert
alert.text:返回alert/confirm/prompt中的文字信息
alert.accept():接收对话框选项
alert.dismiss():取消对话框选项

9.滚动条操作

应用场景:页面注册同意条款,滚动条滚到最后才能点击同意

1.js = "windows.scrollTo(0,10000)"  先设置js控制滚动条语句  0:左边距;10000:上边距
2.driver.execute_script(js)  调用js执行代码

10.frame表单的切换

常见frame表单:frame、iframe两种
为什么要切换frame表单?

当同一个页面有很多表单时,浏览器无法主动从一个表单切换到另一个表单

如何切换frame表单?

1.driver.switch_to.frame(frame_reference)frame_reference:可以为frame框架的name、id或者定位到的frame元素(iframe)
2.driver.switch_to.default_content()   --->恢复默认页面的方法  因为切换语句只有在主目录才有用

注意:从一个子frame表单切换到另一个子frame表单时要先恢复到默认页面,否则报错

11.多窗口切换

为什么要切换窗口?
selenium默认情况下只会在主窗口,如果不切换窗口,那么浏览器无法操作除了主窗口以外的窗口内的任何元素
如何切换窗口?

在selenium中封装了获取当前窗口的句柄、获取所有窗口的句柄和切换到指定窗口句柄的方法:
(句柄是窗口的唯一识别码)
1.driver.current_window_handle        -->获取当前窗口的句柄
2.driver.window_handles      -->获取所有窗口句柄
3.driver.switch_to.window(handle)  -->切换到指定窗口句柄

12.窗口截图、验证码处理

窗口截图:

driver.get_screenshot_as_file(imgpath)imgpath:图片保存的路径  ./pic.png :保存在当前目录下,且图片名称为pic.png../image/pic1.png:保存在上级目录的image文件夹下,且图片名称是pic1.png

随机生成文件名:

driver.get_screenshot_as_file("../image/%s.png"%(time.strftime("%Y_%m_%d %H_%M_%s")))
strftime:将时间转换成字符串函数

应用场景:多条case测试失败,可以使用时间戳的形式进行截图

验证码:
防止恶意请求
注:selenium没有对验证码的处理方法
常见的验证码处理方式:

1.去掉验证码(测试环境采用)
2.设置万能的验证码(生产环境和测试环境)
3.验证码识别技术(通过py-tesseract来识别图片验证码;识别率很难)
4.记录cookie(通过记录cookie进行跳过登录)推荐使用

selenium操作cookie:

1.get_cookie(name)  -->获取制定cookie  name是cookie
2.get_cookies()   -->获取本网站所有的本地cookies
3.add_cookie(cookie_dict)   -->添加cookiecookie_dict:一个字典对象,必选键包括:name、value

相关文章:

Web自动化——python

文章目录 1.八大元素定位2.元素基本操作3.浏览器常用操作4.获取元素信息的常用方法5.鼠标和键盘相关操作6.元素等待1.隐式等待2.显示等待 7.下拉选择框8.弹出框9.滚动条操作10.frame表单的切换11.多窗口切换12.窗口截图、验证码处理 1.八大元素定位 元素属性定位&#xff1a;id…...

华为OD 整数最小和(100分)【java】A卷+B卷

华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...

正则表达式:文本处理中的瑞士军刀

正则表达式是用于提取字符串规律的规则&#xff0c;通过特定语法表达&#xff0c;以匹配符合该规律的字符串。它具有通用性&#xff0c;不仅适用于Python&#xff0c;也可用于其他编程语言。 下面我用Python的re模块来进行实战演示&#xff1a;&#xff08;记得import re&…...

WebSocket 入门案例

目录 WebSocket入门案例WebSocket-server新增项目:添加依赖:yml:启动类&#xff1a; frontend-server前端项目&#xff1a;添加依赖&#xff1a;添加yml&#xff1a;启动类&#xff1a;前端引入JS:前端页面&#xff1a;后端代码&#xff1a;测试&#xff1a; WebSocket 入门案…...

华为OD 最大社交距离(100分)【java】A卷+B卷

华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...

Nginx缓存

Nginx缓存 一般情况下系统用到的缓存有三种 服务端缓存&#xff1a;缓存存在后端服务器&#xff0c;如redis 代理缓存&#xff1a;缓存存储在代理服务器或中间件&#xff0c;内容从后端服务器获取&#xff0c;保存在本地 客户端缓存&#xff1a;缓存在浏览器 [ ] 什么时候会出现…...

Pyecharts绘图教程(2)—— 绘制多种折线图(Line)参数说明+代码实战

文章目录 &#x1f3af; 1 简介&#x1f3af; 2 图表配置项2.1 导入模块2.2 数据配置项2.3 全局配置项 &#x1f3af; 3 代码实战3.1 基础折线3.2 平滑曲线&#xff08;is_smooth&#xff09;3.3 阶梯折线&#xff08;is_step&#xff09;3.4 空值过渡&#xff08;is_connect_n…...

oracle实现搜索不区分大小写

<if test"code ! null and code ! ">and upper(code) like upper(%${code}%) </if>关键字upper...

C++中->与.的区别

在类中 在 C 中&#xff0c;-> 和 . 都可以用于访问类的成员变量和成员函数。但它们在使用上有一些区别&#xff1a; 1. 对于指针类型的对象&#xff0c;必须使用 -> 来访问其成员&#xff1b;而对于非指针类型的对象&#xff0c;则需要使用 . 。 2. -> 运算符在实…...

大语言模型(LLM)综述(二):开发大语言模型的公开可用资源

A Survey of Large Language Models 前言3. RESOURCES OF LLMS3.1 公开可用的模型CheckPoints或 API3.2 常用语料库3.3 库资源 前言 随着人工智能和机器学习领域的迅速发展&#xff0c;语言模型已经从简单的词袋模型&#xff08;Bag-of-Words&#xff09;和N-gram模型演变为更…...

【vSphere 8 自签名证书】企业 CA 签名证书替换 vSphere Machine SSL 证书Ⅳ—— 替换默认证书

目录 博文摘要6. 使用企业 CA 签发的 SSL 证书 替换 vSphere 默认 SSL 证书6.1 确认证书文件6.2 替换默认 vSphere 证书6.3 验证自签名证书6.4 补充说明 关联博文参考资料 博文摘要 博文主要描述了在 vCenter Server 8 上通过实用工具 certificate-manager 将 vSphere 默认 Ma…...

NI9234 4 通道, ±5 V, 24 位软件可选 IEPE 和 AC/DC模拟输入模块振动测试国产替代

NI的自动化测试和测量系统将助您打破桎梏&#xff0c;化不可能为可能。让我们携手合作&#xff0c;选择最适合您的硬件、软件和服务组合&#xff0c;为您提供全副武装&#xff0c;助您成就非凡。 购买NI的产品或服务&#xff0c;并非只是单纯的一次性交易行为。如果您有任何疑…...

宁波市:做大做强跨境电商 赋能外贸创新发展

近日&#xff0c;全国政协第十四届常委会第二次会议专题研究“构建新发展格局&#xff0c;推进中国式现代化”议题&#xff0c;市政协主席徐宇宁参加“推动高水平对外开放”专题小组讨论&#xff0c;全国政协副主席蒋作君到会听取发言&#xff0c;国家发改委、商务部相关司局负…...

为什么这些网站都在使用CFCA证书

在今天的数字时代&#xff0c;保障数据的安全至关重要&#xff0c;尤其是对于金融机构、政府部门和大型企业等组织而言。证书颁发机构在这一领域扮演着关键的角色&#xff0c;而CFCA&#xff08;中国金融认证中心&#xff09;证书已经脱颖而出&#xff0c;展现了其与其他证书的…...

Java编程规范(命名规则),Java程序的运行过程(执行流程)分析

编程规范是对编程的一种约定&#xff0c;主要作用是增强代码的可读性和可维护性&#xff0c;便于代码重用。 首先要求程序中的各个要素都遵守命名规则&#xff0c;然后在编码中严格按照编码格式编写代码。命名规则包括以下几点。 包的名称由一个小写字母序列组成。类的名称由大…...

layui框架实战案例(21):layui table单元格显示图片导致复选框冗余的解决方案

图片自适应表格CSS 为防止单元格内的图片不能正常显示&#xff0c;需本地重写CSS。 /*layui-table图片自适应*/ .layui-table-cell {height: auto;line-height: 20px;}.layui-table-cell img {height: 50%;max-width: 50%; }列代码 , cols: [[{type: checkbox,fixed:left, w…...

指针常量和常量指针

大家好&#xff0c;我叫徐锦桐&#xff0c;个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识&#xff0c;还有日常折腾的经验&#xff0c;欢迎大家来访。 指针常量和常量指针光是这名字就让人头疼了。更何况还有细节问题要理清楚。 正文 命名 其实我…...

GitLab-访问返回403 forbidden问题处理

访问gitlab时报错forbidden 一般访问量大&#xff0c;密码错误频率高的时候&#xff0c;gitlab防爆机制启动了&#xff0c;对IP做了封禁&#xff0c;导致某些IP访问的是否返回 403 forbidden 1. 查看被封的IP /opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/red…...

快来get策略模式,告别编程困惑,轻松变身编程高手✨

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一…...

UPS负载箱的工作原理是什么?

UPS负载箱&#xff08;Uninterruptible Power Supply Load Bank&#xff09;内部包含一组电阻器&#xff0c;通过调节电阻值来模拟不同负载条件。当UPS供电时&#xff0c;电阻器会吸收一定的电能&#xff0c;从而模拟实际负载对UPS的需求。UPS负载箱配备了控制系统&#xff0c;…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...