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

selenuim【1】$x(‘xpath’)、WebDriverWait()、try/assert

文章目录

  • 1、执行driver = webdriver.Chrome()后很久才打开浏览器
  • 2、浏览器多元素定位 $x(‘xpath语法’)
  • 3、打开浏览器driver.get("网址")执行了很久才开始定位元素:等待
    • (1)driver.set_page_load_timeout(t)
    • (2)WebDriverWait()
  • 4、异常处理
    • 处理异常 try/except
    • 断言assert

1、执行driver = webdriver.Chrome()后很久才打开浏览器

尚未解决,一会很快打开一会很慢打开

2、浏览器多元素定位 $x(‘xpath语法’)

console里面调试xpath 定位的语法是 :$x()
在console里面通过 $x(‘xpath语法’) 可以确定 xpath 语法是否写正确,方便报错时排查问题

# //*[@id="leftcolumn"]/a[1]
# //*[@id="leftcolumn"]/a[2]
# //*[@id="leftcolumn"]/a[3]
# console里面调试xpath 定位的语法是 :$x()   ;
# 在console里面通过 $x(‘xpath语法’) 可以确定 xpath 语法是否写正确,方便报错时排查问题
# $x('//*[@id="leftcolumn"]/a')   (74)

请添加图片描述

3、打开浏览器driver.get(“网址”)执行了很久才开始定位元素:等待

selenium元素操作等方法是需要等待页面所有元素完全加载完成后才开始执行的,所以在页面未完成加载前,代码会一直等待页面加载不继续执行。

(1)driver.set_page_load_timeout(t)

解决办法参考资料:
【selenium】解决页面加载时间过长问题
解决 selenium 加载网页阻塞的问题

  • 设置等待时间:driver.set_page_load_timeout(0.1)
  • 超时即抛出异常:try: except TimeoutException:
  • 超时后执行Javascript停止页面加载:driver.execute_script(‘window.stop()’)
# 设置WebDriver的页面加载时间(set_page_load_timeout),
# set_page_load_timeout(time) 方法可以设置页面的加载超时时间
# 在页面加载超出设置时间时会报错,Timed out receiving message from renderer: time
driver.set_page_load_timeout(5)  # 设置页面加载时间miao
PrintTime.NowTime("控制浏览器,访问页面")
start = time.time()
try:driver.get("https://www.runoob.com/html/html-tutorial.html")  # 控制测览器,访问
except TimeoutException:# 超时后执行Javascript停止页面加载PrintTime.NowTime("Time Out")driver.execute_script('window.stop()')
# 显示等待:WebDriverWait()
WebDriverWait(driver, 5, 0.1).until(lambda x: x.find_element_by_id('kw'))
print('the page is loaded')
end = time.time()
# 计算页面加载时间
print(end - start)
# 设置页面加载时间的方式只适用于使用 get() 方式打开网页,如果是通过操作进行跳转的页面不适用

(2)WebDriverWait()

解决办法参考资料:
webdriver中的等待——主要讲解WebDriverWait()

- 显示等待:WebDriverWait()

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

driver:浏览器驱动
timeout:最长超时时间,默认以秒为单位
poll_frequency:检测的间隔步长,默认为0.5s
ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。

- 与until()或者until_not()方法结合使用

WebDriverWait(driver,10).until(method,message="")

在设置时间(10s)内,等待后面的条件发生。如果超过设置时间未发生,则抛出异常。在等待期间,每隔一定时间(默认0.5秒),调用until或until_not里的方法,直到它返回True或False.

- 匿名函数:lambda

# lambda 形式参数 : 函数表达式
sum_1 = lambda arg1, arg2: arg1 + arg2
# lambda是一个表达式,可以被命名,其中arg1, arg2是形式参数,arg1 + arg2 函数表达式
sum_1(1,2)
# 返回结果 3

等待时间为10秒,每0.5秒检查一次,然后使用匿名函数等待直到找到id为’kw’的元素

# 设置等待
wait = WebDriverWait(driver,10,0.5)
# 使用匿名函数
# lambda x: x2 表示一个接受参数x并返回x2的匿名函数
wait.until(lambda diver:driver.find_element_by_id('kw'))

4、异常处理

处理异常 try/except

try:runoob()
except AssertionError as error:print(error)
else:try:with open('file.log') as file:read_data = file.read()except FileNotFoundError as fnf_error:print(fnf_error)
finally:print('这句话,无论异常是否发生都会执行。')

在这里插入图片描述

  • 首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。
  • 如果没有异常发生,忽略 except 子句,try 子句执行后结束。
  • 如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。
  • 如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上层的 try 中。
  • 一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
  • 一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组 except (RuntimeError, TypeError, NameError):
  • 可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。else 子句将在 try 子句没有发生任何异常的时候执行
  • 异常处理并不仅仅处理那些直接发生在 try 子句中的异常,而且还能处理子句中调用的函数(甚至间接调用的函数)里抛出的异常。
  • try-finally 语句无论是否发生异常都将执行最后的代码。

断言assert

  • assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。
  • 断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况。
    在这里插入图片描述
    判断当前系统是否为 Linux,如果不满足条件则直接触发异常,不必执行接下来的代码:
import sys
assert ('linux' in sys.platform), "该代码只能在 Linux 下执行"# 接下来要执行的代码

相关文章:

selenuim【1】$x(‘xpath’)、WebDriverWait()、try/assert

文章目录 1、执行driver webdriver.Chrome()后很久才打开浏览器2、浏览器多元素定位 $x(‘xpath语法’)3、打开浏览器driver.get("网址")执行了很久才开始定位元素:等待(1)driver.set_page_load_timeout(t)(2&#xff…...

机器学习模型总结

多元线性回归(linear regression) 自变量:连续型数据,因变量:连续型数据 选自:周志华老师《机器学习》P53-55 思想:残差平方和达到最小时的关系式子即为所求,残差平方和&#xff1a…...

HTML5:七天学会基础动画网页6

CSS3自定义字体 ①:首先需要下载所需字体 ②:把下载字体文件放入 font文件夹里,建议font文件夹与 css 和 image文件夹平级 ③:引入字体,可直接在html文件里用font-face引入字体,分别是字体名字和路径 例…...

mybatis中#{}和${}的区别?

#{}是占位符,预编译处理;${}是拼接符,字符串替换,没有预编译处理。 Mybatis在处理#{}时,#{}传入参数是以字符串传入,会将SQL中的#{}替换为?号,调用PreparedStatement的set方法来赋值。 Mybat…...

常用git 打tag命令

1.查看所有tag git tag 2.创建 v5.0.0的tag git tag v5.0.0 git tag (创建后查看) 3.推送到远程tag git push origin v5.0.0 4.删除远程tag git push origin --delete v5.0.0 5.删除本地tag git tag -d v5.0.0 6.添加带有备注信息的tag git tag v5.…...

Learning from Unlabeled 3D Environments forVision-and-Language Navigation

这篇论文是关于高级指令的 摘要 在视觉和语言导航 (VLN) 中,实体代理需要按照自然语言指令在真实的 3D 环境中进行导航。现有 VLN 方法的一个主要瓶颈是缺乏足够的训练数据,导致对未见过的环境的泛化效果不理想。虽然 VLN 数据通常是手动收集的&#x…...

【算法分析与设计】组合

📝个人主页:五敷有你 🔥系列专栏:算法分析与设计 ⛺️稳中求进,晒太阳 题目 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 示例 1&…...

数仓模型设计方法论

在当今大数据时代,数据已经成为企业最重要的资产之一。而数据仓库作为企业数据管理和分析的核心基础设施,其设计方法论对于企业的数据治理和决策分析至关重要。本文将探索数仓模型设计的方法论,帮助读者更好地理解和应用数仓模型设计。 一、…...

MySQL 面试题

MySQL 基础 数据库的约束与范式? 七大约束: 检查约束:以数据类型以及数据的长度进行约束,在一个表中, 所插入的数据,必须和数据类型匹配,并且范围不能超过指定的长度。非空约束 not null&…...

计算机专业必看的十部电影

计算机专业必看的十部电影 1. 人工智能2. 黑客帝国3. 盗梦空间4. 社交网络5. Her6. 模仿游戏7. 斯诺登8. 头号玩家9. 暗网10. 网络迷踪 计算机专业必看的十部电影,就像一场精彩盛宴! 《黑客帝国》让你穿越虚拟世界,感受高科技的魅力《模仿游戏…...

数据库之间数据迁移工具datax

简介 DataX 是阿里云 DataWorks数据集成 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, databe…...

uniapp:根据环境(开发、测试、生产)选择服务器接口或者业务

一、根据环境(开发、测试、生产)选择服务器接口或者业务 打开main.js 页面,使用以下代码 const accountInfo wx.getAccountInfoSync(); const envWx accountInfo.miniProgram.envVersion; if (envWx develop) {console.log(开发环境&…...

Leetcode—63. 不同路径 II【中等】

2024每日刷题&#xff08;115&#xff09; Leetcode—63. 不同路径 II 动态规划算法思想 实现代码 class Solution { public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m obstacleGrid.size();int n obstacleGrid[0].size();…...

Redis 之三:Redis 的发布订阅(pub/sub)

概念介绍 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff0c;它允许客户端之间进行异步的消息传递 Redis 客户端可以订阅任意数量的频道。 模型中的角色 在该模型中&#xff0c;有三种角色&#xff1a; 发布者&#xff08;Publisher&#xff09;&#xff1a;负责发送信…...

ngx_waf入门教程:保护你的Nginx服务器

ngx_waf入门教程&#xff1a;保护你的Nginx服务器 在今天的网络环境中&#xff0c;安全性是每个网站和应用程序都必须考虑的关键因素。Nginx作为一款流行的开源Web服务器和反向代理服务器&#xff0c;广泛应用于各种业务场景。为了增强Nginx的安全性&#xff0c;我们可以使用n…...

视觉Transformers中的位置嵌入 - 研究与应用指南

视觉 Transformer 中位置嵌入背后的数学和代码简介。 自从 2017 年推出《Attention is All You Need》以来&#xff0c;Transformer 已成为自然语言处理 (NLP) 领域最先进的技术。 2021 年&#xff0c;An Image is Worth 16x16 Words 成功地将 Transformer 应用于计算机视觉任务…...

真香定律!我用这种模式重构了第三方登录

分享是最有效的学习方式。 博客&#xff1a;https://blog.ktdaddy.com/ 老猫的设计模式专栏已经偷偷发车了。不甘愿做crud boy&#xff1f;看了好几遍的设计模式还记不住&#xff1f;那就不要刻意记了&#xff0c;跟上老猫的步伐&#xff0c;在一个个有趣的职场故事中领悟设计模…...

Linux入门到入土

Linxu Linux 简介 Linux 内核最初只是由芬兰人林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统&#xff0c;是一个基于 POSIX&#xff08;可移植操作系统接口&#xff09…...

基础真空技术外国文献Fundamentals of Vacuum Technology

基础真空技术外国文献Fundamentals of Vacuum Technology...

LeetCode每日一题【c++版】- 用队列实现栈与用栈实现队列

用队列实现栈 题目描述 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现 MyStack 类&#xff1a; void push(int x) 将元素 x 压入栈顶。int pop() 移除…...

机器人任务级迭代学习控制技术解析与应用

1. 任务级迭代学习控制技术解析在机器人操控领域&#xff0c;可变形物体的动态控制一直是个棘手难题。想象一下让机器人系鞋带或者叠衣服的场景——这些对人类来说轻而易举的动作&#xff0c;对机器人而言却需要处理近乎无限的自由度变化。传统方法通常需要精确的物理建模或海量…...

JMeter接口测试实战:从鉴权验证到故障注入的工程化落地

1. 为什么接口测试不能只靠“点点点”——JMeter不是高级版Postman&#xff0c;而是工程化验证的起点很多人第一次接触JMeter&#xff0c;是在开发甩来一个接口文档后&#xff0c;下意识打开Postman填URL、选Method、点Send&#xff0c;看到返回200就松一口气&#xff1a;“通了…...

模拟电路噪声分析五大误区:从频谱密度到电阻选型的实战避坑指南

1. 引言&#xff1a;噪声&#xff0c;模拟工程师的“老朋友”与“老对手”在模拟电路设计的江湖里&#xff0c;噪声就像一位如影随形的“老朋友”&#xff0c;你永远无法彻底摆脱它&#xff0c;却又不得不时刻提防它。它也是我们最棘手的“老对手”&#xff0c;一个不小心&…...

SystemVerilog驱动强度解析:从三态总线到功耗分析的核心技术

1. 项目概述&#xff1a;为什么需要关注驱动强度&#xff1f;在数字电路设计和验证领域&#xff0c;SystemVerilog 作为一门强大的硬件描述与验证语言&#xff0c;其细节往往决定了仿真的精度和设计的可靠性。很多工程师&#xff0c;尤其是刚接触 RTL 设计或转向更复杂验证场景…...

机械/土木 专业是否可以转嵌入式?

机械专业是否可以转嵌入式&#xff1f;总有人担心 “我学机械的能转嵌入式吗&#xff1f;”答案是&#xff1a;完全可以&#xff01;连学土木工程的,我都带出了好几个成功转行嵌入式的! 干机械的甚至比纯 电子 / 计算机的 更有优势 &#xff01;&#x1f4cc; 为什么机械转嵌入…...

Unity里嵌入一个浏览器?用Embedded Browser插件5分钟搞定H5页面展示与交互

Unity项目快速集成H5页面&#xff1a;Embedded Browser插件实战指南 当Unity项目需要展示动态更新的网页内容时&#xff0c;传统方案往往需要重新开发UI或依赖第三方服务。而Embedded Browser插件提供了一种优雅的解决方案&#xff0c;让开发者能够在Unity中直接嵌入完整的浏览…...

PC版微信小程序抓包实战:WinHTTP+Proxifier+Burp精准拦截方案

1. 为什么PC版微信小程序抓包非得绕开模拟器&#xff1f;很多人一提“抓PC微信小程序的包”&#xff0c;第一反应就是开个安卓模拟器&#xff0c;装个微信PC版的APK&#xff0c;再配个Fiddler或者Charles——这路子没错&#xff0c;但实操起来全是坑。我去年帮三个客户做小程序…...

服务器末级缓存优化:指令-数据关联性管理技术

1. 服务器工作负载中的末级缓存挑战在现代多核处理器架构中&#xff0c;共享末级缓存(Shared Last-Level Cache, LLC)的性能优化一直是计算机体系结构研究的核心课题。随着云计算和分布式计算的普及&#xff0c;服务器工作负载呈现出两个显著特征&#xff1a;指令足迹(instruct…...

什么是运算符

等一下...

uv虽快但包管理体验差:命令笨拙、更新不安全,改进之路在何方?

【uv项目承接与特点】自2023年以来&#xff0c;作者首次有空承接新的项目。Astral的uv在Python世界掀起热潮&#xff0c;它速度极快&#xff0c;能轻松处理Python版本&#xff0c;还能用一个二进制文件替代半打工具&#xff0c;作者之前也写过多篇关于它的文章。【uv使用体验问…...