关于selenium有三种等待方式,分别为显示等待、隐式等待、强制等待
强制等待其实就是让程序暂停一段时间,让页面加载后再运行下一步的代码
首先,再使用强制等待前要先导入需要的包
import time
或者
from time import sleep
具体使用方法如下:
import time
for i in range(9):
print(i)
time.sleep(1) #使程序暂停运行1秒
或者
from time import sleep
for i in range(9):
print(i)
sleep(1) #使程序暂停运行1秒
这样程序就会每隔1秒输入i的值,这里要注意time.sleep(1)或 sleep(1)的单位是秒
使用这种方式的缺点是,如果有多个sleep语句,整个脚本的等待时间会很长
隐式等待就是在规定的时间内等页面全部加载完成后,再去进行下一步操作。
这种方式的优点是只需设置一次就可以对整个driver生效
缺点是会加长等待时间,特别是在网络慢的情况下
另外,在打开新的窗口后需要重新设置
使用方法:
from selenium import webdriver
# 打开浏览器
driver = webdriver.Chrome()
# 窗口最大化
driver.maximize_window()
# 设置隐式等待10s
driver.implicitly_wait(10)
# 访问地址
driver.get('http://baidu.com')
显示等待就是当查找的元素出现后,无论网页是否加载完成都进行下一步操作
当需要进行下一步操作的元素还未加载出来时,每隔一段时间就会查找一次
当在规定的时间内没有找到需要的元素时,就报错
使用方法:
from selenium import webdriver
from selenium.webdriver.common.by import By
# 导入显示等待模块
from selenium.webdriver.support.wait import WebDriverWait
#导入显示等待条件
from selenium.webdriver.support import expected_conditions as EC
# 打开浏览器
driver = webdriver.Chrome()
# 窗口最大化
driver.maximize_window()
# 访问地址
driver.get('http://baidu.com')
# 向输入框中输入CSDN
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located((By.ID, 'kw'))).send_keys("CSDN")
# 点击百度一下
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located((By.ID, 'su'))).click()
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located((By.ID, 'su')))
其中driver是webdriver对象;20是最长等待的时间,单位为秒;0.5是每隔0.5秒查找对应的元素,单位为秒。until后为查找的条件,EC是判断条件
until()也可以替换为until_not(),until是找到元素了在执行下一步,until_not是元素找不到了再执行下一步