首页 > 其他分享 >三种等待方法

三种等待方法

时间:2022-10-14 16:33:26浏览次数:49  
标签:webdriver 方法 driver 三种 import 等待 until selenium

强制等待

使用 time.sleep() 强制等待,设置固定的休眠时间,对于代码的运行效率会有影响。以上面的例子作为参照,将 隐式等待 改为 强制等待。

 

隐式等待

隐式等待也是指定一个超时时间,如果超出这个时间指定元素还没有被加载出来,就会抛出 NoSuchElementException 异常。
除了抛出的异常不同外,还有一点,隐式等待是全局性的,即运行过程中,如果元素可以定位到,它不会影响代码运行,但如果定位不到,则它会以轮询的方式不断地访问元素直到元素被找到,若超过指定时间,则抛出异常。

使用 implicitly_wait() 来实现隐式等待,使用难度相对于显式等待要简单很多。
示例:打开个人主页,设置一个隐式等待时间 5s,通过 id 定位一个不存在的元素,最后打印 抛出的异常 与 运行时间。

from selenium import webdriver
from time import time

driver = webdriver.Chrome()
driver.get('https://blog.csdn.net/qq_43965708')

start = time()
driver.implicitly_wait(5)
try:
driver.find_element_by_id('kw')
except Exception as e:
print(e)
print(f'耗时:{time()-start}')

代码运行到 driver.find_element_by_id('kw') 这句之后触发隐式等待,在轮询检查 5s 后仍然没有定位到元素,抛出异常。

显式等待

显式等待:设置一个超时时间,每个一段时间就去检测一次该元素是否存在,如果存在则执行后续内容,如果超过最大时间(超时时间)则抛出超时异常(TimeoutException)。显示等待需要使用 WebDriverWait,同时配合 until 或 not until 。下面详细讲解一下。

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

driver:浏览器驱动
timeout:超时时间,单位秒
poll_frequency:每次检测的间隔时间,默认为0.5秒
ignored_exceptions:指定忽略的异常,如果在调用 until 或 until_not 的过程中抛出指定忽略的异常,则不中断代码,默认忽略的只有 NoSuchElementException 。
until(method, message=’ ‘)
until_not(method, message=’ ')

method:指定预期条件的判断方法,在等待期间,每隔一段时间调用该方法,判断元素是否存在,直到元素出现。until_not 正好相反,当元素消失或指定条件不成立,则继续执行后续代码
message: 如果超时,抛出 TimeoutException ,并显示 message 中的内容
method 中的预期条件判断方法是由 expected_conditions 提供,下面列举常用方法。

先定义一个定位器

from selenium.webdriver.common.by import By
from selenium import webdriver

driver = webdriver.Chrome()
locator = (By.ID, 'kw')
element = driver.find_element_by_id('kw')

 

下面写一个简单的例子,这里定位一个页面不存在的元素,抛出的异常信息正是我们指定的内容。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
element = WebDriverWait(driver, 5, 0.5).until(
EC.presence_of_element_located((By.ID, 'kw')),
message='超时啦!')

 

标签:webdriver,方法,driver,三种,import,等待,until,selenium
From: https://www.cnblogs.com/lwcx/p/16792002.html

相关文章

  • android:加载PDF几种方法汇总对比
    在安卓项目中,加载PDF文件,是一个比较常见的需求。又分为两大类,1.加载网络PDF2.加载一个本地静态PDF。查阅资料,纵观网上在安卓中打开PDF的各种方式,大致可以分为以下几类......
  • [2022.10.14]Java方法
    加上static变成类变量Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用设计方......
  • 利用for循环同步执行异步方法
    //定义一个异步函数constfoo1=(i)=>{returnnewPromise((resolve,reject)=>{setTimeout(()=>{console.log(I)resolve(i)},3000......
  • 4. HTML引用CSS(4种方法)
    1. 前言CSS样式需要引用到HTML中才能真正有效,那么如何才能在HTML中引用CSS呢?下面就来介绍一下。2.内嵌样式表您可以在HTML头部(<head>标签内)的<style>标签......
  • 记录下上传docx文件的方法
      代码@ApiOperation(value="下载模板接口")@GetMapping(value="downloadTemplate")publicvoiddownloadTemplate(HttpServletResponseresponse)throwsIOExce......
  • Python 进阶之源码分析:如何将一个类方法变为多个方法?
    前一篇文章《​​Python中如何实现参数化测试?​​》中,我提到了在Python中实现参数化测试的几个库,并留下一个问题:它们是如何做到把一个方法变成多个方法,并且将每个方法与......
  • react 方法内返回dom的方法
    functionMyComponent(){return(<React.Fragment>Sometext.<h2>Aheading</h2>Moretext.<h2>Anotherheading</h2>Evenm......
  • Python最会变魔术的魔术方法,我觉得是它!
    在​​上篇文章中​​,我有一个核心的发现:Python内置类型的特殊方法(含魔术方法与其它方法)由C语言独立实现,在Python层面不存在调用关系。但是,文中也提到了一个例外:一个非......
  • 香港服务器租用带宽的三种类型是什么
    1、极速系列选择极速系列的香港服务器,企业使用的带宽为大陆专享带宽;大陆专享,顾名思义是线路直通大陆地区,专门为大陆访问群体所使用,因此大陆的用户在访问此类带宽的服务......
  • 05方法的重载
    一、方法重载重载就是在一个类中,有相同的函数名称,但形参不同的函数。重载原则:方法名称必须相同;参数列表必须不同(个数不同,或类型不同,或参数排列顺序不同等);方法的......