当前位置: 首页 > 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;…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...