程序都要等待设置的时间
由于web网页打开后需要时间进行数据的传送,页面的衬着,所以我们在写web自动化脚本的时候,需要期待它加载完所有的页面元素,我们才进行操纵或点击。同时这种期待也是为了提高脚本的不变性。
selenium中有三种期待,分袂是强制期待,,隐性期待和显性期待:
1、强制期待
不管浏览器是否加载完,措施都要期待设置的时间,不建议经常使用该期待方法,会严重影响措施的执行速度。
time.sleep(秒数)-----这里的时间单位是秒,暗示强制期待几秒
在使用该函数前要导入time模块
import time from selenium import webdriver driver = webdriver.Chrome() driver.get("http://ke.qq.com") time.sleep(3)
2、隐性期待
隐形期待是设置了一个最长期待时间,如果在规按时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。注意这里有一个毛病,那就是措施会一直期待整个页面加载完成。隐性期待对driver的整个周期都起感化,所以只要设置一次即可。
implicitly_wait(30)----隐性期待,最永劫长为30秒
from selenium import webdriver driver = webdriver.Chrome() driver.get("http://ke.qq.com") driver.implicitly_wait(10) # 隐性期待10秒 driver.find_element_by_xpath("//a[@data-type = ‘1‘]").click()
3、强制期待
WebDriverWait,共同该类的until()和until_not()要领,就能够按照判断条件而进行灵活地期待了。它主要的意思就是:在设置的最永劫间里面周期性的去查抄这个元素是否满足设定的条件,如果到了截止时间还未满足条件则抛出TimeoutException。
模块导入:
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))------循环周期是0.5秒,最永劫长为20秒,期待元素存在
对付元素的状态:存在、可见、可用的理解:
元素存在(html里存在,能找到)
元素可见(存在并且可见-看得见巨细-可见才可操纵)
元素可用(可见之后,才有可用的可能性、只读/不成点击)
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 import time driver = webdriver.Chrome() driver.get("https://ke.qq.com/") driver.maximize_window() #隐性期待 driver.implicitly_wait(20) #显性期待 loc =(By.ID, "js_login") WebDriverWait(driver, 20).until(EC.visibility_of_element_located(loc)) #点击登录元素 driver.find_element(*loc).click() #点击qq登录 driver.find_element_by_xpath("//a[@data-type = ‘1‘]").click()
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30127.html