1、等待是为了使脚本执行更加稳定
2、常用的休眠方式:time模块的sleep方法
浏览器等待
1) 显示等待
显示等待是根据条件进行等待,等待条件出现
实现:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,
默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置
时间检测不到则抛出异常。
from selenium import webdriver # 导入By from selenium.webdriver.common.by import By # 导入webdriver等待类 from selenium.webdriver.support.ui import WebDriverWait # 导入预期条件设置类 from selenium.webdriver.support import expected_conditions as EC # 创建一个浏览器 driver = webdriver.Firefox() # 访问百度 url = 'http://www.baidu.com' driver.get(url) # 浏览器总共等待10秒,在10秒内,每隔0.5秒去使用id的方式定位一下元素,如果定位到,就结束等待,如果定位不到同时没有大于10秒,则继续等待 el = WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,'lg'))) driver.close()
2)隐式等待
隐式等待是根据是件进行等待,等待特定时间
driver.implicitly_wait(n)
n的单位为秒,n为最大值,在这个最大值内只要元素定位到就结束等待
优先 隐式等待 次之 显式等待 最次 固定等待
selenium模块中的等待方法
implicitly_wait() 设置webdriver等待时间,查找所有元素的等待时间
WebDriverWait 等待条件满足或者超时后退出 from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver d = webdriver.Firefox() d.get('https://www.baidu.com/') d.implicitly_wait(5) d.find_element_by_id('kw').send_keys("慕课网")
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait import time def get_ele_times(driver,times,func): return WebDriverWait(driver,times).until(func) def test(): d = webdriver.Firefox() d.get('https://www.baidu.com/') d.find_element_by_id('kw').clear() d.find_element_by_id('kw').send_keys("慕课网") d.find_element_by_id('su').click() ele = get_ele_times(d, 10, lambda d: d.find_element_by_partial_link_text('程序员的梦工厂')) ele.click() time.sleep(10) print(d.window_handles) d.switch_to.window(d.window_handles[1]) print(d.current_window_handle) d.quit() test()
完