Selenium之等待机制
用于网络延迟严重场景,避免代码执行较快,但是遇到标签还没有加载完成就对该标签进行操作,就会出现报错在selenium中,有三种等待机制可用:
1.显式等待,当有需要等待的标签时,才去使用等待
2.隐式等待,在浏览器对象创建之初,就为这个对象添加一个被动,即隐式等待,当遇到查找标签的时候,就自动触发被动也就是隐式等待
3.强制等待,time.sleep(1),休眠
from time import sleep
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw').send_keys(r'断浪狂刀忆年少-cnblogs')
driver.find_element_by_id('su').click()
# 显示等待
wait = WebDriverWait(driver=driver, timeout=10, poll_frequency=0.5) # timeout超时时间,poll_frequency轮询,每%s秒去检查一下标签有没有加载成功
wait.until(EC.visibility_of_element_located(
(By.LINK_TEXT, '断浪狂刀忆年少 - 博客园'))).click() # 直到找到加载成功找到这个元素后,在进行事件操作(By.LINK_TEXT,'断浪狂刀忆年少 - 博客园')这里要用元组
sleep(1)
driver.quit()
# 隐式等待
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw').send_keys(r'断浪狂刀忆年少-cnblogs')
driver.find_element_by_id('su').click()
driver.implicitly_wait(30) # 隐式等待
driver.find_element_by_link_text('断浪狂刀忆年少 - 博客园').click()
sleep(1)
driver.quit()