selenium三种等待方式详解

2023-11-08

一、场景

我们在做WEB自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素的错误,这样就要求我们在有些场景下加等待时间。

二、强制等待

1、利用time模块的sleep方法来实现,最简单粗暴的方法。

2、不管浏览器是否加载完成,都强制等待5s,时间一到,就会执行下面的代码,不建议使用这种等待方式,因为严重影响代码的执行速度

import time

from selenium import webdriver

# 启动浏览器
driver = webdriver.Chrome()

# 打开百度网页
driver.get("https://www.baidu.com")

# 定位输入框输入内容
driver.find_element("id","kw").send_keys("测试工程师")

# 等待5s
time.sleep(5)

#退出浏览器
driver.quit()

三、隐性等待

设置一个隐性等待时间10s,如果在这个时间内,网页加载完成,就会执行下一步操作,否则一直等到超时,然后再执行下一步操作,这种等待方式也会存在一个弊端,程序会一直等待整个页面加载完成,直到超时,但是有时候我们需要的哪一个元素,已经加载完成了,只是页面其他元素加载比较慢,我仍要等待所有的元素加载完成才会执行下一步。特点:全局设置,设置一次就够了

import time

from selenium import webdriver

# 启动浏览器
driver = webdriver.Chrome()

# 打开百度网页
driver.get("https://www.baidu.com")

# 隐性等待10s
driver.implicitly_wait(10)

# 定位输入框输入内容
driver.find_element("id","kw").send_keys("中国")

# 定位百度一下 点击按钮
driver.find_element('id','su').click()

# 点击搜索结果页的超文本链接,跳转新窗口
driver.find_element("xpath","//a[text()='中国政府网']").click()

# 等待5s
time.sleep(5)

#退出浏览器
driver.quit()

四、显性等待

1、上面提到了隐性等待存在的弊端,如果想等自己想要的元素被加载出来就执行下一步操作,这个时候就用到显性等待了

2、显性等待需要用到WebDriverWait,配合该类的unitl()和unitl_not()方法来使用

3、timeout=10---设置超时时间,poll_frequency=0.5---每隔多秒检测一次,可不传,有默认值。

4、还需要导入一个类expected_conditions,来使用他里面的定位元素方法。

5、TimeoutException 超时会抛出超时异常

import time

from selenium import webdriver
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

# 启动浏览器
driver = webdriver.Chrome()

# 打开百度网页
driver.get("https://www.baidu.com")

# # 隐性等待10s
# driver.implicitly_wait(10)

# 定位输入框输入内容
driver.find_element("id","kw").send_keys("中国")

# 定位百度一下 点击按钮
driver.find_element('id','su').click()

# 初始化一个等待器
wait = WebDriverWait(driver,timeout=10,poll_frequency=0.5)
wait.until(expected_conditions.element_to_be_clickable(("xpath","//a[text()='中国政府网']")))

# 点击搜索结果页的超文本链接,跳转新窗口
driver.find_element("xpath","//a[text()='中国政府网']").click()

# 等待5s
time.sleep(5)

#退出浏览器
driver.quit()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

selenium三种等待方式详解 的相关文章

随机推荐

  • "ORA-00942: 表或视图不存在 "的原因和解决方法

    采用Oracle数据库 使用Powerdesigner设计 生成Sql文件导入后查询出现 ORA 00942 表或视图不存在 很是郁闷 这个问题以前出现过 当初解决了 但因好久没有使用 这次竟然忘了 害得我浪费了好些时间 为了避免再次忘记
  • 消息中间件(MQ)

    一 什么是消息中间件 关注于数据的发送和接收 利用高效可靠的异步消息传递机制集成分布式系统 通过提供消息传递和消息排队模型 它可以在分布式环境下扩展进程间的通信 二 为什么需要消息中间件 1 系统解耦 假设你有个系统A 这个系统A会产出一个
  • 数据治理总结

    项目背景 前提 参与人员均了解熟悉数据中心 业务痛点 始于一次吐槽大会 1 开发及使用人员信息不对称 2 表中字段增减随意 3 相似数据冗余 4 定制化表过多 扩展功能不足 维护成本高 5 缺少注释 全凭猜测 浪费时间 项目计划 1 确定治
  • [North Central NA Contest 2018] Rational Ratio

    Description Every positive rational number can be expressed as a ratio of two positive integers However in decimal form
  • 【目标检测】Towards Accurate One-Stage Object Detection with AP-Loss

    摘要 one stage目标探测器通过同时优化分类损失和定位损失进行训练 前者由于锚的数量众多而遭受极端的前景 背景类别失衡问题 本文提出了一个新颖的框架 以分级任务代替one stage检测器中的分类任务 并采用平均精度损失 AP los
  • flink学习39:tableAPI应用实例

    实例
  • linux下串口的安装和使用(ubuntu+usb转串口)

    转自 http blog csdn net u014416516 article details 39482183 安装 在终端中输入sudo apt get install minicom 配置 输入sudo minicom s 注意前边
  • 成功 打不开_【2019】Adobe XD 闪退白屏打不开的解决方法

    原文是微信公众号文章 原文链接 2019 关于 Adobe XD 闪退白屏打不开的解决方法 mp weixin qq com Adobe XD 作为一款战略地位超越 Photoshop 的一站式 UI UX 设计平台软件 每天有无数 UI
  • 电路(1) ——LC谐振电路

    最近小菜转行了 不再做软开 博客会更新一些电路分析的内容 从零开始学电分的第一天 加油
  • 元宇宙改变人类工作模式的四种方式

    想象一个世界 你可以与同事在海边交谈 在空间站周围漂浮时做会议记录 或者从你在伦敦的办公室传送到纽约 所有这些都无需走出你的前门 由于今天安排的会议太多而感到压力 那么为什么不发送支持 AI 的数字双胞胎来减轻你的负担呢 这些例子只是对 元
  • Echarts图表不显示

    Echarts图表不显示 div标签的style属性设置有问题 div style width 500px height 500px div
  • C++课程基础语法小结

    前言 每个人的记忆是有限的 学过的东西很快就会遗忘 因此 在即将升大二之际 对大一学习的C 的基础语法进行整理归纳 并附上一年里写过的一些重要代码 方便今后回顾 声明 本文参考教材提供的网络学习资料 非常感谢 网址已注明 代码为博主本人大一
  • 人体活动识别总结

    人体活动识别 活动识别过程 数据采集 数据预处理 窗口分割 特征提取 特征选择 活动分类 面临问题 人类活动识别 HAR 仍有许多问题促使新技术的发展 以提高在更现实的条件下的准确性 其中一些挑战是 1 要度量的属性选择 2 便携的 不显眼
  • 3D开发-PhotoScan 模型生成

    PhotoScan是一款图片转3D模型软件 需要商业license 其图片转3D模型效果非常好 是一款基于影响自动生成高质量三维模型的优秀软件 这对于3D建模需求来说实在是一把利器 图片转3D模型操作 Step1 选择工作流程 Step2
  • 虚拟现实(VR)在医疗保健中的5种应用

    医疗保健中的VR虚拟现实 虚拟现实的由来已久 18世纪 法国的医生使用布制的分娩模拟器向助产师和外科医生教授医学技术 在20世纪60年代初 医生一边对心肺复苏学员口述心肺复苏的技巧 一边使用一家塑料玩具厂家制造的塑料娃娃现场演示胸部按压和人
  • 安全(四):CSRF攻击

    csrf获取的不是用户的所有权限 获取的是用户在修改东西的时候 通过url权限修改信息 查看这里
  • MySQL-面试题

    第六章 决胜秋招 Section A 练习一 各部门工资最高的员工 难度 中等 创建Employee 表 包含所有员工信息 每个员工有其对应的 Id salary 和 department Id Id Name Salary Departm
  • 已知树的中序序列和先序/后序序列,求树的结构?

    已知树的中序序列和先序 后序序列 求树的结构 这类问题比较经典了 刚好CSDN上有人问起 所以自己写了一个递归算法 根据中序和先序 后序 建立树结构 这里需要说明的是 必须要知道中序序列 先序和后序可选的情况下才能推导出树结构 只知道后序先
  • Springboot毕设项目二手手机回收系统2r40d(java+VUE+Mybatis+Maven+Mysql)

    Springboot毕设项目二手手机回收系统2r40d java VUE Mybatis Maven Mysql 项目运行 环境配置 Jdk1 8 Tomcat8 5 Mysql HBuilderX Webstorm也行 Eclispe I
  • selenium三种等待方式详解

    一 场景 我们在做WEB自动化时 一般要等待页面元素加载完成后 才能执行操作 否则会报找不到元素的错误 这样就要求我们在有些场景下加等待时间 二 强制等待 1 利用time模块的sleep方法来实现 最简单粗暴的方法 2 不管浏览器是否加载