15-三种等待方式

简介: 15-三种等待方式

1.  强制等待

  • 方法:sleep(seconds),seconds 等待时间,单位 秒 s
  • 说明:不管浏览器是否加载完了,程序都得等待3秒,不建议使用,严重影响执行速度
1. # -*- coding: utf-8 -*-
2. # @Time    : 2021/1/17
3. # @Author  : 大海
4. 
5. from selenium import webdriver
6. from time import sleep
7. 
8. driver = webdriver.Chrome()
9. driver.get('https://blog.csdn.net/IT_heima?spm=1001.2014.3001.5343')
10. 
11. sleep(2)  # 强制等待2秒再执行下一步
12. print(driver.current_url)
13. print(driver.title)
14. 
15. driver.close()

2. 隐式等待

  • 方法:implicitly_wait(time_to_wait) ,  time_to_wait 等待时间, 单位 秒 s
  • 说明:设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。此方法是全局性的,设置一次即可
  • 弊端:程序会一直等待整个页面加载完成,也就是一般情况下看到浏览器标签栏那个小圈不再转,才会执行下一步,但是页面的元素已加载完,js等未加载完,仍会等待
1. # -*- coding: utf-8 -*-
2. # @Time    : 2021/1/17
3. # @Author  : 大海
4. 
5. from selenium import webdriver
6. 
7. driver = webdriver.Chrome()
8. # 隐式等待,最长等20秒
9. driver.implicitly_wait(20)
10. driver.get('https://blog.csdn.net/IT_heima?spm=1001.2014.3001.5343')
11. 
12. print(driver.current_url)
13. print(driver.title)
14. 
15. driver.close()

3. 显式等待

   init方法:__init__(driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)

  • driver :浏览器驱动。  
  • timeout :最长超时时间,默认以秒为单位。
  • poll_frequency :检测的间隔(步长)时间,默认为0.5S。
  • ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常。

  unit方法:until( method, message='')

  • method:传入执行的方法
  • message:超时时的提示信息

  until_not方法:同until

  • 使用: WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)
1. # -*- coding: utf-8 -*-
2. # @Time    : 2021/1/17
3. # @Author  : 大海
4. 
5. from selenium import webdriver
6. from selenium.common.exceptions import ElementNotVisibleException
7. from selenium.webdriver.support.ui import WebDriverWait
8. 
9. driver = webdriver.Chrome()
10. # 隐式等待,最长等20秒
11. driver.implicitly_wait(20)
12. driver.get('http://baidu.com')
13. 
14. print(driver.current_url)
15. print(driver.title)
16. 
17. # 每隔0.5s去查找元素 kw,超时时间为10s,返回WebElement对象
18. element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("kw"))
19. element.send_keys('selenium')
20. 
21. # 每隔1去查找元素 kw是否可见,超时时间为30s,返回结果为布尔值  
22. is_disappeared = WebDriverWait(driver, 30, 1, ElementNotVisibleException).until_not(
23. lambda x: x.find_element_by_id("kw1").is_displayed())
24. print(is_disappeared)
25. 
26. # 错误用法   until() 第一个参数应该是方法,此处传入的是WebElement对象,所以不正确,可参照上面的写法
27. # WebDriverWait(driver, 10).until(driver.find_element_by_id('kw'))
28. driver.close()

4. 总结

  • sleep():强制等待n秒,影响程序执行速度
  • implicitly_wait():隐式等待,全局性,设置一次即可,针对的是整个页面是否加载完成
  • WebDriverWait():显示等待,针对单个元素判断,灵活
  • 隐式等待和显时等待同时使用时,超时时间取两者最长的


相关文章
|
1月前
文件存取方式
顺序存取方式和随机存取方式: 顺序存取就是从上往下,一笔一笔读取文件的内容。写入数据时,将数据附加在文件的末尾。这种存取方式常用于文本文件。 随机存取方式多半以二进制文件为主。它会以一个完整的单位来进行数据的读取和写入,通常以结构为单位。
|
1月前
.文件存取方式
顺序存取方式和随机存取方式: 顺序存取就是从上往下,一笔一笔读取文件的内容。写入数据时,将数据附加在文件的末尾。这种存取方式常用于文本文件。 随机存取方式多半以二进制文件为主。它会以一个完整的单位来进行数据的读取和写入,通常以结构为单位。
第二种简单方式创建模型控制器的方式
第二种简单方式创建模型控制器的方式
|
4月前
|
边缘计算 运维 Kubernetes
在K8S中,常见部署K8S方式有哪些?
在K8S中,常见部署K8S方式有哪些?
|
7月前
|
存储 XML 文件存储
Android数据存储的五种方式1
Android数据存储的五种方式
137 2
|
7月前
|
存储 SQL 数据库
Android数据存储的五种方式2
Android数据存储的五种方式
74 0
|
7月前
|
存储 Android开发
Android数据存储的五种方式3
Android数据存储的五种方式
47 0
|
人工智能 自动驾驶 新能源
“以终为始”的正确使用方式
“以终为始”的正确使用方式
150 0
系统通信方式操作
系统通信方式操作
78 0
系统通信方式操作
|
网络协议 Dubbo NoSQL
服务探活的五种方式
总之一句话总结起来就是Provider节点没有摘除流量前,就无法处理请求了。可以分为三类: 系统异常:如断电、断网、其他硬件故障、或操作系统异常退出 进程异常退出:进程异常退出,端口挂掉,如有注销机制但没来得及注销,如执行了kill -9 进程无法处理请求:端口还在,但服务无法正常响应,如Full GC期间
935 0
服务探活的五种方式