在Selenium Webdriver中等待的方式简单可以概括为三种:
  1、导入time包,调用time.sleep()的方法传入时间,这种方式也叫强制等待,固定死等一个时间

2、隐式等待,直接调用implicitly_wait()方法,传入等待时间,比如implicitly_wait(10),就代表最长等待10秒
  
表示在自动化实施过程中,为查找页面元素或者执行命令设置一个最长等待时间,如果在规定时间内也没元素被找到或命令被执行完成,则执行下一步,否则继续等待直到设置的最长等待时间截止

3、显式等待,导入WebDriverWait和expected_conditions包,调用until()者until_not()方法
  
通过selenium.webdriver.suppert.ui模块提供的WebDriverWait类,再结合该类的until()和until_not()的方法,并自定义好等待时间,根据判断条件进行灵活等待。显式等待比隐式等待更节约执行时间,因此更推荐使用显式等待方式判断页面元素是否存在

-- coding: utf-8 --

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.Firefox()
driver.implicitly_wait(10) # 隐性等待和显性等待可以同时用,但要注意:等待的最长时间取两者之中的大者
driver.get(‘https://huilansame.github.io’)
locator = (By.LINK_TEXT, ‘CSDN’)

try:
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))
print driver.find_element_by_link_text(‘CSDN’).get_attribute(‘href’)
finally:
driver.close()

需要特别说明的是:隐性等待对整个driver的周期都起作用,所以只要设置一次即可,我曾看到有人把隐性等待当成了sleep在用,走哪儿都来一下…

隐形等待
是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,我仍得等到页面全部完成才能执行下一步,我想等我要的元素出来之后就下一步怎么办?有办法,这就要看selenium提供的另一种等待方式——显性等待wait了

显性等待
WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。它主要的意思就是:程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException

上例中,我们设置了隐性等待和显性等待,在其他操作中,隐性等待起决定性作用,在WebDriverWait…中显性等待起主要作用,但要注意的是:最长的等待时间取决于两者之间的大者,此例中为20,
如果隐性等待时间 > 显性等待时间,则该句代码的最长等待时间等于隐性等待时间。

wait模块的WebDriverWait类是显性等待类,先看下它有哪些参数与方法:
selenium.webdriver.support.wait.WebDriverWait(类)

element=WebDriverWait(driver,5,0.5),until(EC.presence_of_element_located((By.ID,‘su’)))
element=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located(locator))

init
driver: 传入WebDriver实例,即我们上例中的driver
timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
poll_frequency: 调用until或until_not中的方法的间隔时间,默认是0.5秒
ignored_exceptions: 忽略的异常,如果在调用until或until_not的过程中抛出这个元组中的异常,则不中断代码,继续等待,如果抛出的是这个元组外的异常,则中断代码,抛出异常。默认只有NoSuchElementException


概念:
显示等待是针对某一个元素进行相关等待判定
隐式等待不针对某一个元素进行等待,是全局元素等待
相关模块(类):
WebDriverWait #显示等待,对元素比用
expectd_conditions #预期条件类(里面包含方法可以调用,用于显示等待)
NoSuchElementException #用于隐式等待跑出异常
By    #用于元素定位1、显示等待:
导入相关模块:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC #定义了变量EC表示expected_conditions
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
显示等待如下:
driver=webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_css_selector('#kw').send_keys('python')
time.sleep(2)
element=WebDriverWait(driver,5,0.5),until(EC.presence_of_element_located((By.ID,'su')))
解释:WebDriverWait(driver,5,0.5)5表示等待的最大时长秒单位,0.5位间隔秒
EC.presence_of_element_located((By.ID,'su'))方法本身调用时有括号,所以调用时会有双括号填入参数2、隐式等待:
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time
driver=webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.implicitly_wait(5) #隐式等待,设置等待时长5秒
try:print(time.ctime())driver.find_element_by_css_selector('#kw').send_keys('python')driver.find_element_by_css_selector('#su').click()except NoSuchElementException as msg:print(msg)
finally:print(time.ctime())

python显示等待隐式等待相关推荐

  1. App自动化02-元素定位、显示与隐式等待、常见控件交互方法

    1.demo案例 selenium 版本建议 3.141.0(pip install selenium==3.141.0) appium-python-client 版本建议 1.2.0 import ...

  2. 5-Selenium WebDriver三种等待--隐式等待-显式等待和流畅等待

    在selenium中,Waits在执行测试中扮演重要角色.在本教程中,您将学习Selenium中"隐式"和"显式"等待的各个方面. 在Selenium中为什么需 ...

  3. python隐式等待_selenium中隐式等待和显示等待的区别

    Selenium显示等待和隐式等待的区别 1.selenium的显示等待 原理:显示等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那 ...

  4. Appium+PythonUI自动化之webdriver 的三种等待方式(强制等待、隐式等待、显示等待)

    在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时时间,大致应该在1-3秒的样子,如果这个时间内仍然定位不到元素,就会抛出异常,中止脚本执行.我们可以通过在 ...

  5. selenium 的显示等待与隐式等待

    现在很多的网页都采用了 Ajax 技术,那么采用一般的静态爬虫技术会出现抓取不到页面的元素.比如歌曲的主页会有评论数量,一般评论数量是动态加载的. 所以这就涉及到selenium,支持各种浏览器,包括 ...

  6. 隐式等待,显示等待,强制等待

    显示等待WebDriverWait().隐式等待implicitly_wait().强制等待sleep() 先说强制等待sleep(), 单位是秒; 无论结果如何都要强制等待,到设置的时间后再执行接下 ...

  7. webdriver 的三种等待方式(强制等待,隐式等待,显示等待)

    在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时时间,大致应该在1-3秒的样子,如果这个时间内仍然定位不到元素,就会抛出异常,中止脚本执行.我们可以通过在 ...

  8. Selenium的显示等待和隐式等待

    Selenium的显示等待和隐式等待 隐式等待 当使用了隐式等待执行测试的时候,如果WebDriver没有在DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常, 换句话说,当查找元素或 ...

  9. 显示等待与隐式等待的用法

    隐式等待:隐式等待针对的是一个全局的设置,设置隐式等待后,脚本中的所有页面元素操作都遵从这个类似全局性质的等待标准.但有时候页面元素加载完毕,不一定元素就能被点击,此时就需要显示等待来处理了. dri ...

最新文章

  1. 点分治问题 ----------- P3727 曼哈顿计划E[点分治+博弈SG函数打表找规律]
  2. CentOS 配置防火墙操作实例(启、停、开、闭端口)
  3. 网站优化之网站文章更新需注意哪些问题?
  4. C# ACCESS数据库操作类
  5. 视频清晰度、色偏以及亮度异常检测
  6. 使用nginx部署简单的前端项目,nginx.conf配置
  7. bootstrapt 表格自适应_一起聊B端设计 - 如何设计表格?
  8. Python实现动态图的解析、合成与倒放
  9. CSS基本知识—浮动
  10. VB 二进制数组与十六进制字符串相互转换
  11. [linux]远程kill进程
  12. Silverlight 2 中简单的2.5D控件
  13. 如何防止社工钓鱼——软件伪造
  14. CAD切换工作窗口快捷键
  15. android gps 经纬度转换,AndroidGPS获取当前经纬度坐标
  16. java毕业生设计学生实验报告管理系统计算机源码+系统+mysql+调试部署+lw
  17. 软件设计师和软件评测师有什么区别?若想从事软件开发方面,哪个更适合?
  18. 【数据分析】2种常见的反爬虫策略,信息验证和动态反爬虫
  19. PyQt(Python+Qt)学习随笔:clicked和clicked(bool)信号连接同名函数出现的问题
  20. java之随机生成名字

热门文章

  1. Python报错:ImportError: attempted relative import with no known parent package
  2. 计算机发展简史的ppt教程,计算机发展简史PPT.ppt
  3. 如何将小程序内置非promise API转换为promise对象(风袖小程序的学习)
  4. Vue项目中的Emitted value instead of an instance of Error问题
  5. 全球与中国婴儿零食市场深度研究分析报告
  6. [保姆级教程]解决Centos 8下无法更新的问题 (附无痕迁徙到Rocky Linux的方法)
  7. 【车间调度】FJSP的属性模型符号约定和约束条件
  8. 仿微信朋友圈【九宫格的实现】
  9. 活性染料(反应染料)
  10. java多线程学习笔记。