selenium自动化中元素的三大等待

等待元素可见之后再去操作,如果你的操作,带来了页面的变化,那么接下来要操作新的元素,必须要等待新的元素可见之后再操作
1、强制等待
sleep(等待的秒数):等到了规定的时间才会进行其他操作

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()
# 页面发生了变化
time.sleep(3) # 强制等待
driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click()
time.sleep(2) # 强制等待

 

2、隐性等待
driver.implicitly_wait(秒)   隐性等待、

一次会话当中,在启动会话(webdrvier.Chromt())到结束会话(driver.quit())只需要调用一次

只适用于场景:1、等待元素存在(DOM页面里面)、2、等待命令执行完成(),

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(30)  # 隐性等待时间
driver.get("http://www.baidu.com")
driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()
# 页面发生了变化
# 隐性等待,全局设置一次隐形等待,那么整个会话(从打开浏览器到最后结束关闭浏览器)期间全部应用
# 只适用于场景:1、等待元素存在(DOM页面里面)、2、等待命令执行完成(),
# 元素本身存在的情况就不太好用(这个百度的就是本身存在)
# 等待上限:30s 元素什么时候存在了,什么时候就不等了。如果超时了就会抛异常,TimeoutExceptid
driver.find_element_by_xpath('//p[@id="TANGRAM__PSP_10__footerULoginBtn"]').click()

driver.quit()

 

3、显性等待

智能等待,上限时间范围之内,等待 xxx 条件成立,就结束等待。

1)时间上限、2)条件、3)等待(时间上限,轮询周期),每隔多久判断条件是否成立,成立就不等,未成立就等,超过时间上限就报错

等待:WebdriverWait类  条件:expected_condition   各种场景比如元素可见,

 

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

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()
# 页面的变化 - 弹出了登录框 默认轮询周期0.5秒
# WebDriverWait(driver, 等待上限, 轮询周期).until(条件)
loc = (By.XPATH, '//p[@id="TANGRAM__PSP_10__footerULoginBtn"]')
WebDriverWait(driver, 30).until(EC.visibility_of_element_located(loc))
# 元素可见:visibility_of_element_located
# 元素们可见:visibility_of_elements_located

# 点击
driver.find_element(*loc).click()

driver.quit()

 

posted @ 2020-03-14 16:38  一八十四  阅读(244)  评论(0编辑  收藏  举报