15.三种元素等待方式
from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.select import Select from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.chrome.options import Options import time driver = webdriver.Chrome() driver.get("http://sahitest.com/demo/waitFor.htm") # 强制等待:不管元素是否加载出来都必须等xx时间 el1 = driver.find_element_by_xpath("/html/body/form/input[2]") el1.click() time.sleep(3) el2 = driver.find_element_by_xpath("//*[@id='id2']") print(el2.text) # 隐式等待:设置一个最长等待时间,如果在这个时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步,注意这个里有一个弊端,那就是程序会一直等待整个页面加载完成也就是浏览器标签栏那个小圆圈不再转,才执行下一步,但有时候页面想要的元素早就加载完成了,但是因为个别的js之类的东西特别慢 el1 = driver.find_element_by_xpath("/html/body/form/input[2]") el1.click() driver.implicitly_wait(3) el2 = driver.find_element_by_xpath("//*[@id='id2']") print(el2.text) # 显式等待:WebDriverWait,配合该类的until()和until_not()方法就能够根据判断条件而进行灵活的等待了,它主要的意思就是:程序每隔xx看一眼,如果条件成立,则执行下一步然后抛出TimeoutException异常 el1 = driver.find_element_by_xpath("/html/body/form/input[2]") el1.click() locate = ("xpath", "/html/body/form/div/div") WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locate)) # EC.presence_of_element_located() 判断元素是否在dom中 el2 = driver.find_element_by_xpath("//*[@id='id2']") print(el2.text) driver.quit()