Python + Selenium: 等待处理

本文介绍了Python+Selenium在网页测试中如何处理等待问题,包括time.sleep()的强制等待,implicitly_wait()的隐性等待,以及WebDriverWait()的显性等待。详细解释了每种方法的工作原理,并通过实例展示了它们的使用,强调显性等待的智能化和灵活性。同时,说明了隐性等待和显性等待共存时的等待时间判断,以及显性等待中until()方法的运用。
摘要由CSDN通过智能技术生成

我们前面介绍的Selenium的WebDriver测试方法是基于网页来进行的。之前的例子都是用简单的网页来操作,可能体会不到网页的加载过程,但实际应用过程中,网页加载是要消耗一定的时间的。你的脚本已经开始运行,但你要定位的元素却还没加载出来,此时就会报出一个找不到元素的错误。显然,没有考虑加载时间的脚本不是一个成功的脚本。今天我们就来介绍一下如何设置等待时间。

等待的三种方法

time.sleep(n)

强制等待n秒。Python本身的函数,包含在time包中,使用前需要导入time包。我们之前的实例中经常会使用这种等待,方便大家能看清脚本执行的结果。这种等待方法十分笨拙,无论页面加载得如何,都必须等待n秒,可以说是十分不智能了。

implicitly_wait(n)

最长等待n秒,若n秒内页面加载完成,则提前结束等待。WebDriver提供的等待方法,也被称为隐性等待,比强制等待聪明了一点,但如果页面本身包含一个超大视频之类的文件,就算我们需要定位的元素在最开始已经加载出来,却依旧要等待所有文件加载结束之后,脚本才能继续执行,依旧算是有些弊端。

WebDriverWait(n)

最长等待n秒,n秒内每隔一段时间去检查需要定位的元素是否存在,若存在则提前结束等待。也是WebDriver提供的等待方法,也被称为显性等待,这种等待比隐性等待更智能了一些,无视整个页面的加载,只要需要的元素存在了,就结束等待。

实例

强制等待在之前例子中都有使用过了,我们就来看一看WebDriver提供的两种等待方法

隐性等待

其实隐性等待在之前的介绍中也有使用过,但没有特别提到使用的方法。我们这次来打开网易的首页,这是一个加载内容很多的门户网站,根据网速不同,目测大概要10秒左右才能加载完毕,我们把等待时间设置为60秒,然后计算一下从打开页面到点击页面导航栏中的【公开课】按钮需要多久。

# coding = utf-8
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.implicitly_wait(60) #隐性等待时间60秒
time_start = time
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Selenium进行网页自动化时,我们经常需要等待某些元素的加载、某些操作的完成等。为了实现等待的效果,我们可以使用Selenium提供的等待方法,如`WebDriverWait`和`expected_conditions`。 在等待过程中,我们经常需要使用匿名函数来定义等待的条件。匿名函数是指不具备名称的函数,它通常用于简单的、一次性的操作,例如在等待时判断某个元素是否可见、是否存在等。 下面是一个匿名函数在等待中的示例: ```python from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 定义等待条件 wait = WebDriverWait(driver, 10) element = wait.until(EC.visibility_of_element_located((By.XPATH, "//div[@class='example']"))) # 使用匿名函数判断元素是否存在 if wait.until(lambda driver: driver.find_elements_by_xpath("//div[@class='example']")): print("元素存在") else: print("元素不存在") ``` 在上面的代码中,我们使用`visibility_of_element_located`等待元素可见,并使用匿名函数判断元素是否存在。匿名函数的参数是`driver`,即WebDriver对象,它的返回值是一个元素列表。如果元素列表不为空,则说明元素存在;否则,元素不存在。 需要注意的是,在使用匿名函数时,我们需要传入一个参数,即WebDriver对象,这个对象会在等待过程中被自动传入。除此之外,我们还需要在匿名函数中明确返回一个值,这个值会被用来判断等待是否成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值