博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python爬虫基础12-selenium大全6/8-等待
阅读量:5101 次
发布时间:2019-06-13

本文共 1982 字,大约阅读时间需要 6 分钟。

Selenium笔记(6)等待

本文集链接:

 

简介

在selenium操作浏览器的过程中,每一次请求url,selenium都会等待页面加载完毕以后,才会将操作权限再次交给我们的程序。

但是,由于ajax和各种JS代码的异步加载问题,所以我们在使用selenium的时候常常会遇到操作的元素还没有加载出来,就会引发报错。为了解决这个问题,Selenium提供了几种等待的方法,让我们可以等待元素加载完毕后,再进行操作。

 

显式等待

例子

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("http://somedomain/url_that_delays_loading") try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) ) finally: driver.quit()

在这个例子中,我们在查找一个元素的时候,不再使用find_element_by_*这样的方式来查找元素,而是使用了WebDriverWait

try代码块中的代码的意思是:在抛出元素不存在异常之前,最多等待10秒。在这10秒中,WebDriverWait会默认每500ms运行一次until之中的内容,而until中的EC.presence_of_element_located则是检查元素是否已经被加载,检查的元素则通过By.ID这样的方式来进行查找。

就是说,在10秒内,默认每0.5秒检查一次元素是否存在,存在则将元素赋值给element这个变量。如果超过10秒这个元素仍不存在,则抛出超时异常。

Expected Conditions

Expected Conditions这个类提供了很多种常见的检查条件可以供我们使用。

  • title_is

  • title_contains

  • presence_of_element_located

  • visibility_of_element_located

  • visibility_of

  • presence_of_all_elements_located

  • text_to_be_present_in_element

  • text_to_be_present_in_element_value

  • frame_to_be_available_and_switch_to_it

  • invisibility_of_element_located

  • element_to_be_clickable

  • staleness_of

  • element_to_be_selected

  • element_located_to_be_selected

  • element_selection_state_to_be

  • element_located_selection_state_to_be

  • alert_is_present

例子:

from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 10) # 等待直到元素可以被点击 element = wait.until(EC.element_to_be_clickable((By.ID, 'someid')))

 

隐式等待

隐式等待指的是,在webdriver中进行find_element这一类查找操作时,如果找不到元素,则会默认的轮询等待一段时间。

这个值默认是0,可以通过以下方式进行设置:

from selenium import webdriver ​ driver = webdriver.Chrome() driver.implicitly_wait(10) # 单位是秒 driver.get("http://somedomain/url_that_delays_loading") myDynamicElement = driver.find_element_by_id("myDynamicElement")

 

转载于:https://www.cnblogs.com/winfun/p/10985509.html

你可能感兴趣的文章
快速创建一个 spring mvc 示例
查看>>
swing入门教程
查看>>
好莱坞十大导演排名及其代表作,你看过多少?
查看>>
JVM-class文件完全解析-类索引,父类索引和索引集合
查看>>
Loj #139
查看>>
StringBuffer是字符串缓冲区
查看>>
hihocoder1187 Divisors
查看>>
java入门
查看>>
Spring 整合 Redis
查看>>
Azure 托管镜像和非托管镜像对比
查看>>
SQLite3初探
查看>>
多线程/多进程/异步IO
查看>>
leetcode 442. 数组中重复的数据 java
查看>>
struts2 文件上传下载注解示例
查看>>
编写一个简单的JAVA WEB Servlet页面
查看>>
JSP:Cookie实现永久登录(书本案例)
查看>>
js window.open 参数设置
查看>>
032. asp.netWeb用户控件之一初识用户控件并为其自定义属性
查看>>
linux--GCC用法
查看>>
Ubuntu下安装MySQL及简单操作
查看>>