web自动化的三大等待

因为web网页打开后须要时间进行数据的传送,页面的渲染,因此咱们在写web自动化脚本的时候,须要等待它加载完全部的页面元素,咱们才进行操做或点击。同时这种等待也是为了提升脚本的稳定性。html

selenium中有三种等待,分别是强制等待,隐性等待和显性等待:python

一、强制等待web

无论浏览器是否加载完,程序都要等待设置的时间,不建议常常使用该等待方式,会严重影响程序的执行速度。浏览器

time.sleep(秒数)-----这里的时间单位是秒,表示强制等待几秒函数

在使用该函数前要导入time模块spa

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://ke.qq.com")
time.sleep(3)

二、隐性等待htm

隐形等待是设置了一个最长等待时间,若是在规定时间内网页加载完成,则执行下一步,不然一直等到时间截止,而后执行下一步。注意这里有一个弊端,那就是程序会一直等待整个页面加载完成。隐性等待对driver的整个周期都起做用,因此只要设置一次便可。blog

implicitly_wait(30)----隐性等待,最长时长为30秒ci

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()

三、显性等待element

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()

隐性等待和显性等待能够同时使用,最长的等待时间取决于二者之间的大者。

相关文章
相关标签/搜索