Python selenium 等待方式详解:强制等待、隐性等待和显性等待

需积分: 1 1 下载量 63 浏览量 更新于2024-08-04 收藏 124KB PDF 举报
解读Python selenium的等待方式 Python selenium 是一个功能强大的自动化测试工具,但是很多人在使用 selenium 时经常会遇到等待的问题,今天我们来详细讲解 Python selenium 的等待方式。 等待的必要性 ------------- 在使用 selenium 时,我们经常会遇到一些问题,如下拉框定位不到、弹出框定位不到等,这些问题大多数情况下都是因为没有加等待或 frame 问题。我们的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么量级的,两者之间的速度差异会导致很多问题。 强制等待 ---------- 强制等待是最简单粗暴的一种等待方式,就是使用 sleep 函数强制让程序等待一定的时间,不管浏览器是否加载完了,程序都得等待这个时间。例如: ``` from selenium import webdriver from time import sleep driver = webdriver.Firefox() driver.get('http://huilansame.github.io') sleep(3) # 强制等待 3 秒 print(driver.current_url) driver.quit() ``` 这种方式叫强制等待,不管浏览器是否加载完了,程序都得等待 3 秒,然后继续执行下面的代码。这种方式可以用于调试,但是不建议总用这种等待方式,因为它太死板,严重影响程序执行速度。 隐性等待 ---------- 隐性等待是第二种等待方式,使用 implicitly_wait 函数来设置等待时间。隐性等待的意义是:闪电侠和凹凸曼约定好,不论闪电侠去哪儿,都要等凹凸曼 xx 秒,如果凹凸曼在这段时间内来了,则俩人立即出发去打怪兽,如果凹凸曼在规定时间内没到,则闪电侠自己去,那自然就等着凹凸曼给你抛异常吧。 ``` from selenium import webdriver driver = webdriver.Firefox() driver.implicitly_wait(30) # 隐性等待,最长等 30 秒 driver.get('http://huilansame.github.io') ``` 隐性等待的好处是可以减少等待时间,提高程序执行速度,但是需要注意的是,如果在规定时间内元素没有加载出来,程序将抛出异常。 显性等待 ---------- 第三种等待方式是显性等待,使用 WebDriverWait 类来实现等待。显性等待可以根据实际情况来等待元素的加载,例如: ``` from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait driver = webdriver.Firefox() driver.get('http://huilansame.github.io') element = WebDriverWait(driver, 30).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) ) ``` 显性等待可以实现更灵活的等待方式,但是需要注意的是,需要根据实际情况来设置等待时间和条件。 结论 ---- Python selenium 的等待方式有三种:强制等待、隐性等待和显性等待。每种等待方式都有其优缺点,需要根据实际情况来选择合适的等待方式,以提高程序执行速度和稳定性。