Selenium等待元素出现
https://www.selenium.dev/documentation/webdriver/waits/
有时候我们需要等待网页上的元素出现后才能操作。selenium中可以使用以下几种方法等大元素。
直接time.sleep()
这个不用解释了吧....
time.sleep(秒)
隐式等待implicitly_wait
# 设置粘性超时以隐式等待找到元素或完成命令。
# 每个会话只需要调用一次此方法,针对所有元素都生效。
driver.implicitly_wait(2.5)
什么意思呢?就是你使用find_element()方法查找元素最长的等待时间,
显示等待WebDriverWait
实现该功能的核心为:WebDriverWait类
通过调用WebDriverWait 中的方法until或者until_not,并向其传递查找元素的方法。
until(method)方法:调用提供的method,直到返回值为True(也就是找到了元素)
unitl_not(method)方法:调用提供的method,直到返回值为False (也就是找不到元素...)
实际上until和until_not就是一个循环判断获取元素:看源码如下:
def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.
:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None
# 将当前时间+超时秒数,然后计算最长等待时间
end_time = time.monotonic() + self._timeout
# 死循环一直判断获取元素
while True:
try:
# 调用函数
value = method(self._driver)
# 如果有值就返回,此时就会跳出循环了
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, "screen", None)
stacktrace = getattr(exc, "stacktrace", None)
# 没有找到值就sleep指定的秒数.self._poll是初始化WebDriverWait类时指定的,没有指定默认为0.5秒
time.sleep(self._poll)
# 判断当前时间是否超过了最长等待时间,超过了就跳出循环直接抛出异常!
if time.monotonic() > end_time:
break
raise TimeoutException(message, screen, stacktrace)
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
**from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC **
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
# 显式等待
WebDriverWait(driver, 20, 0.5).until(
EC.presence_of_element_located((By.LINK_TEXT, '好123'))
)
# 参数20表示最长等待20秒
# 参数0.5表示0.5秒检查一次规定的标签是否存在。默认就是0.5
# EC.presence_of_element_located((By.LINK_TEXT, '好123')) 表示通过链接文本内容定位标签
# 每0.5秒一次检查,通过链接文本内容定位标签是否存在,如果存在就向下继续执行;如果不存在,直到20秒上限就抛出异常
print(driver.find_element_by_link_text('好123').get_attribute('href'))
driver.quit()
Selenium等待元素出现的更多相关文章
- [Selenium]等待元素出现之后再消失,界面上的loading icon都属于这种类型,之前的方法总是卡死,换这种方法目前还好用的
等待元素出现之后再消失,界面上的loading icon都属于这种类型,之前的方法总是卡死,换这种方法目前还好用的 /** * Check if the element present with cu ...
- selenium 等待元素加载
今天,尝试用代码指定自动化测试用例. 将测试record导出为C# 代码后,使用FF的drive ,发现执行一直失败,提示无法加载元素.顿时一种无力感袭来啊.还是硬着头皮找方法.尝试id name x ...
- 【亲测显式等待】Selenium:元素等待的4种方法
Selenium:元素等待的4种方法 1.使用Thread.sleep(),这是最笨的方法,但有时候也能用到而且很实用. 2.隐式等待,隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉We ...
- python selenium等待特定网页元素加载完毕
selenium等待特定元素加载完毕 is_disappeared = WebDriverWait(driver, 8, 0.5, ignored_exceptions=TimeoutExceptio ...
- selenium界面元素定位
一. Selenium界面元素定位 本文元素定位以das2为例 #导入包 from selenium import webdriver #打开火狐驱动 driver=webdriver ...
- selenium等待
简介 在selenium操作浏览器的过程中,每一次请求url,selenium都会等待页面加载完成以后, 才会将操作权限在交给我们的程序. 但是,由于ajax和各种JS代码的异步加载问题,当一个页面被 ...
- python+selenium遇到元素定位不到的问题,顺便记录一下自己这次的错误(报错selenium.common.exceptions.NoSuchElementException)
今天在写selenium一个发送邮件脚本时,遇到一些没有找到页面元素的错误.经过自己反复调试,找原因百度,终于解决了.简单总结一下吧,原因有以下几点: 一:Frame控件嵌套,.Frame/Ifram ...
- selenium中元素操作之浏览器窗口滚动&网页日期控件操作(js操作)(五)
js的滚动条scrollIntoView() Arguments[] - python与js之间的羁绊 1.移动到元素element对象的“底端”,与当前窗口的“底部”对齐: driver.execu ...
- selenium定位元素的方法
1.id定位: find_element_by_id() 从上面定位到的搜索框属性中,有个id="kw"的属性,我们可以通过这个id定位到这个搜索框 代码: # coding = ...
- Helium文档8-WebUI自动化-wait_until等待元素出现
前言 wait_until等待某个条件为真才继续往下执行.默认的超时时间为10s,每0.5查询一次,这俩参数选填.可以设置超时时间和轮询间隔. 可以作为添加后校验元素是否存在的场景 入参介绍 def ...
随机推荐
- QA|workon env后没有进入虚拟环境,但也没有报错,但cmd可以|Python虚拟环境
问题:pycharm的terminal执行workon env后没有进入虚拟环境,但也没有报错 但cmd可以 原因:因为pycharm的terminal用的是powershell,更改为cmd,重新打 ...
- 4.go语言复合类型简述
目录 1. 本章前瞻 2.来自leetcode的例题 描述 分析 题解 3. 复合类型新版本的变化 3.1 string和[]byte的高效转化 3.2 内置函数clear 4. 复合类型概述 4.1 ...
- 2017-A1
#include <iostream> #include <string> using namespace std; int main(){ string s; cin> ...
- Linux挂载新磁盘
Linux挂载新磁盘 1. 查看磁盘 # df -lh # 查看磁盘占用情况,同时可以查看已挂载的磁盘及其挂载位置 # fdisk -l # 查看所有的磁盘分区 图中 /dev/sdb 下无分区信息, ...
- MySQL实战实战系列 07 行锁功过:怎么减少行锁对性能的影响?
在上一篇文章中,我跟你介绍了 MySQL 的全局锁和表级锁,今天我们就来讲讲 MySQL 的行锁. MySQL 的行锁是在引擎层由各个引擎自己实现的.但并不是所有的引擎都支持行锁,比如 MyISAM ...
- MapReduce和Spark读取HBase快照表
1.概述 随着大数据技术的不断发展,处理海量数据的需求变得愈发迫切.MapReduce作为一种分布式计算模型,为处理大规模数据提供了有效的解决方案.在这篇博客中,我们将探讨如何使用MapReduce框 ...
- Jupyter_Notebook_添加代码自动补全功能
Jupyter Notebook 添加代码自动补全功能 安装 如果之前安装过显示目录功能的话,这一步骤可以跳过. pip install jupyter_contrib_nbextensions 配置 ...
- options has an unknown property ‘contentBase‘
options has an unknown property 'contentBase' 踩坑新版webpack-dev-serve 新版的contentBase取消了替代属性是static
- [ABC216G] 01Sequence 题解
01Sequence 题目大意 构造一个满足 \(m\) 个形如 \((l,r,x)\) 的限制条件的 \(01\) 序列,其中 \((l,r,x)\) 表示区间 \([l,r]\) 的和不小于 \( ...
- Chromium Trace and Perfetto使用详解
1. Trace chromium 在 base 库中提供了 base::trace_event::TraceLog 类,该类是 TRACE_EVENT* , TRACE_COUNTER* 等宏的底层 ...