一、三种等待方式
- 强制等待
time.sleep(10):如果设置10秒,即使页面已经加载出来了,也不执行操作,必须够10秒才能执行下面的操作 - 隐形等待
driver.implicitly_wait(30):设置最长的等待时间,在这个时间内加载完成,则执行下一步操作,整个driver的会话期内,设置一次即可,全局可用,应用度上不灵活
from selenium import webdriver
driver = webdriver.Chrome()
#全局等待-隐性等待
driver.implicitly_wait(10)
driver.get('https://www.baidu.com/')
driver.maximize_window()
driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()
driver.find_element_by_id('TANGRAM__PSP_11__footerULoginBtn').click()
- 显性等待
明确等到某个条件满足后,再去执行下一步操作,程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置最长时间,然后抛出TimeoutException
WebDriverWait()类,显性等待类,
用法:WebDriverWait(driver,等待时间,轮询周期).until()/until_not()
ecpected_conditions模块:提供一系列发生的条件
presence_of_element_located:元素存在
visibility_of_element_located:元素可见
element_to_be_clickable :元素可点击
使用方法
1、先确定元素的定位表达式
2、调用WebDriverWait()类设置等待总时长,轮询周期,并调用until()、until_not()方法
WebDriverWait(driver,等待时间,轮询周期).until()/until_not(判断条件)
3、使用ecpected_conditions对应的方法来生成判断条件
EC.类名(定位方式,定位表达式)
例:等待百度登陆的弹框出现,再去操作弹出框
#显性等待需要引入三个库
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.maximize_window()
driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()
id="TANGRAM__PSP_11__f