1.强制等待(无条件等待)
使用方法:time.sleep(delay)
delay的单位为秒,delay设置多少秒页面就会等待多少秒(死等),这个方法很容易让线程挂掉,使程序抛异常,所以要慎用此方法。
使用举例:打开百度,强制等待5秒
#导入强制等待模块
import time
from selenium import webdriver
wd = webdriver.Chrome()
wd.get('https://www.baidu.com')
#强制等待5秒
time.sleep(5)
2.显式等待(有条件等待)
当等待的条件满足后(一般用来判断需要等待的元素是否加载出来),就继续下一步操作。等不到就一直等,如果在规定的时间之内都没找到,那么就跳出Exception。
使用显示等待前需先导入显示等待所需模块和等待条件
#显式等待模块
from selenium.webdriver.support.ui import WebDriverWait
#显式等待条件
from selenium.webdriver.support import expected_conditions as EC
使用举例:
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
wd = webdriver.Chrome()
wd.get('http://www.baidu.com')
#wd是webdriver对象,10是最长等待时间,0.5是每0.5秒去查询对应的元素。until后面跟的等待具体条件,EC是判断条件,检查元素是否存在于页面的 DOM 上。
login_btn=WebDriverWait(wd,10,0.5).until(EC.presence_of_element_located((By.ID, "s-top-loginbtn")))
#点击元素
login_btn.click()
3.隐式等待(无条件等待,在一个时间段内等待)
- 一次设置,全局生效。不要当作固定等待使用,不要每次需要等待时都写一次隐式等待。
- 隐式等待设置了一个最长等待时间,在规定时间内网页加载完成(也就是一般情况下你看到浏览器标签栏那个小圈不再转就代表加载完成),则执行下一步,否则一直等到时间结束,然后执行下一步。
如果是只需等待页面中的一个元素加载就用显示等待,等待整个网页加载就用隐式等待。
使用方法:implicitly_wait(delay),delay的单位为秒
使用举例:打开www.qq.com,等待页面加载完成后,点击新闻链接
from selenium import webdriver
from selenium.webdriver.common.by import By
wd = webdriver.Chrome()
wd.get('http://www.qq.com')
wd.implicitly_wait(10)
wd.find_element(By.CSS_SELECTOR,'[href="http://news.qq.com/"]').click()
版权归原作者 Evan.lu 所有, 如有侵权,请联系我们删除。