selenium自动化等待元素

显性等待

webdriver等待某个条件成立则继续执行,否则在达到最大时长时抛出超时异常(TimeoutException)

webdriver 中提供了WebDriverWait()显示等待方法

 

 

还可以利用is_displayed()实现显示等待

复制代码
from selenium import webdriver
from time import sleep, ctime

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

print(ctime())
for i in range(10):
    try:
        el = driver.find_element_by_id("kw22")
        # is_displayed():判断元素是否可见
        if el.is_displayed():
            break
    except:
         pass
    sleep(1)
else:
    print("time out")
    print(ctime())

driver.quit()
复制代码

执行结果如下:

Tue Sep 10 14:47:30 2019
time out
Tue Sep 10 14:47:41 2019

2.隐式等待

 webdriver中的implicitly_wait()方法可用来实现隐式等待。

复制代码
from time import ctime
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

driver = webdriver.Firefox()

# 设置隐式等待10s
# 1.这10s并非固定等待时间,它并不影响脚本的执行速度。
# 2.它会等待页面上的所有元素
# 3.当脚本执行到某个元素定位时,如果元素存在,则继续执行;如果定位不到元素,则以轮询的方式不断地判断元素是否存在
driver.implicitly_wait(10) 
driver.get("http://www.baidu.com")

try:
    print(ctime())
    driver.find_element_by_id("kw22").send_keys("selenium")
except NoSuchElementException as e:
    print(e)
finally:
    print(ctime())
    driver.quit()
复制代码

执行结果为:

Tue Sep 10 15:58:03 2019
Message: Unable to locate element: [id="kw22"]

Tue Sep 10 15:58:13 2019

 

原文地址:https://www.cnblogs.com/zhifeiji822/p/13050261.html