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

news2024/9/22 17:37:52

文章目录

  • 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 下执行"

# 接下来要执行的代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1488683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Live Home 3D Pro:您的私人家居设计师,让家更有温度

Live Home 3D Pro是一款功能强大的家居设计软件,它凭借直观的用户界面和丰富的设计工具,为用户提供了一个全新的家居设计体验。无论您是专业设计师还是普通用户,Live Home 3D Pro都能帮助您轻松实现家居设计的梦想。 Live Home 3D Pro mac版…

枚举与尺取法(蓝桥杯 c++ 模板 题目 代码 注解)

目录 组合型枚举(排列组合模板()): 排列型枚举(全排列)模板: 题目一(公平抽签 排列组合): ​编辑 代码: 题目二(座次问题 全排…

财报解读:基本盘稳定后,联想如何进一步抢占AI时代?

从2021年下半年开始,受诸多因素影响,消费电子行业始终处在承压状态,“不景气”这一关键词屡次被市场提及。 但寒气没有持续,可以看到,消费电子行业正在逐渐回暖。国金证券在今年1月的研报中就指出,从多方面…

学习python时一些笔记

1、winr 命令提示符的快捷键 输入cmd进入终端 2、在终端运行桌面上的python文件 cd desktop(桌面) cd是进入该文件夹的意思。 cd .. 回到上一级 运行python时一定要找到文件的所在地 输入python进入,exit()退出%s字符串占位符%d数字占位符%f浮点数占位符input输…

手把手教你零成本获客的教育培训小程序

随着科技的发展,数字化教育成为现代教育的趋势。为了满足教育培训机构的需求,许多教育培训小程序搭建平台应运而生。今天,我们将为大家介绍一种简单快捷的搭建教育培训小程序的方法。 首先,登录【乔拓云】制作平台,进入…

Java毕业设计 基于SpringBoot vue 社团管理系统

Java毕业设计 基于SpringBoot vue 社团管理系统 SpringBoot vue 社团管理系统 功能介绍 社团成员: 登录 首页 社团列表 加入社团申请 我的社团 在线留言 社长: 登录 首页 用户信息管理 入团申请管理 社团活动管理 社团成员管理 社团新闻管理 社团费用管理 系统管理员: 登录…

汽车碰撞与刮伤的实用维修技术,汽车的车身修复与涂装修补教学

一、教程描述 本套汽车维修技术教程,大小7.44G,共有60个文件。 二、教程目录 01-汽车车身修复教程01-安全规则(共3课时) 02-汽车车身修复教程02-汽车结构(共3课时) 03-汽车车身修复教程03-汽车修复所使…

复合数据类型(ch3)

将array依次执行以下操作 1.把列表中的元素升序排序。 2.删除列表中的最后一个元素。 3.把列表中第一个元素移动到列表尾部。 4.返回新列表。array [85,96,2,5,3,566,0,91,5234,5555,89,62,34] #*******请输入您的代码********# #***********begin************# def sort_and_…

Groovy(第五节) Groovy 之集合

Groovy 可以直接在语言内使用集合。在 Groovy 中,不需要导入专门的类,也不需要初始化对象。集合是语言本身的本地成员。Groovy 也使集合(或者列表)的操作变得非常容易,为增加和删除项提供了直观的帮助。 可以将范围当作集合 在前一节学习了如何用 Groovy 的范围将循环变得…

项目中遇到的耗时点-(图片缩放里面添加的标记红圈无法缩放)

实现效果 1、需求:显示服务端返回的在线url图片,并且根据标记圈的坐标点和半径绘制到图片上 分析:由于涉及到图片上加标记,可考虑的方案有 1、加个父布局,里面嵌入两个ImageView 2、自定义ImageView、使其支持标图 …

【网站项目】182在线作业管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

docker配置数据默认存储路径graph已过时,新版本中是data-root

错误信息 我在修改/etc/docker/daemon.json文件中,添加存储路径graph字段。然后sudo systemctl restart docker包如下错误:使用journalctl -xeu docker.service错误信息,发现不能匹配graph字段。 原因 我的docker版本: 在doc…

【计算机那些事】

目录 【云计算】 【原神用的是UDP还是TCP】 【几个特殊地址】 【socket是什么】 【内网穿透是什么】 【为什么有HTTP协议,还要有websocket协议】 【科普路由器,集线器,交换机,网桥,光猫】 【USB接口那些事】 …

【Python】进阶学习:pandas--rename()用法详解

【Python】进阶学习:pandas-- rename()用法详解 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的…

ZYNQ PS 读取 TF 卡 BIN 文件中的浮点数

动机 在进行 AI 算法加速器设计时,需要读取模型导出的权重和数据集数据作为加速器的输入,而目前我个人比较常用的做法是将权重和数据集(如果数据集过大,可以选择一两张图片)放到 SD/TF 卡中,然后 PS CPU核去进行数据读取&#xff…

Spring:FactoryBean预加载逻辑以及自定义实现Mybatis的接口扫描

Spring:FactoryBean预加载逻辑以及自定义实现Mybatis的接口扫描 1 前言 参考Mybatis框架的Mapper注解扫描Mapper接口的业务逻辑,其中集成Spring的逻辑里使用到了Spring框架的FactoryBean拓展点,本文针对Spring FactoryBean的加载流程进行分…

嵌入式中C语言结构体的实现

C语言中的数组只能允许程序员定义存储相同类型数据。但是结构是C语言编程中允许您存储不同数据类型的数据。 结构体的定义 要想定义结构,必须用到struct关键字,struct的语句格式: 在struct 中声明了一个含有若干新成员的数据类型。 tag 是结构…

Vision Pro开发者学习路线

官方给到的Vision Pro开发者学习路线: 1. 学习基础知识: - 学习 Xcode、Swift 和 SwiftUI 的基础知识,包括语法、UI 设计等。 - 掌握 ARKit 和 SwiftUI 的使用,了解如何创建沉浸式增强现实体验。 2. 学习 3D 建模&#xf…

CleanMyMac X2024测评深度分析与功能全面介绍

一、软件概述 CleanMyMac X 是一款强大的Mac清理和优化工具,它可以帮助用户轻松管理和释放Mac上的空间,优化系统性能,提高运行速度。这款软件以其直观的用户界面和丰富的功能受到了广大Mac用户的欢迎。 CleanMyMac X4.14.6全新版下载如下: …