Selenium:理解等待

时间:2014-12-24 10:42:51

标签: python selenium selenium-webdriver

我在网上看到的最常见的等待操作是

driver.get(url)
# apply a wait now

但是,如果我在REPL中,我可以看到driver.get是一个阻塞操作,在完成之前无法完成任何操作。

>>> driver.get(url)
# this blocks everything else until loading is complete

那么等待工作怎么样?如果有的话,不应该等到driver.get之前宣布?

2 个答案:

答案 0 :(得分:4)

我认为您对访问网址所需的时间感到困惑,这是一个阻塞操作,而命令等待是在Selenium中实现的。

请参阅文档http://selenium-python.readthedocs.org/en/latest/waits.html

Selenium Webdriver提供两种类型的等待 - 隐式和&明确。显式等待使WebDriver等待某个条件发生,然后再继续执行。隐式等待使WebDriver在尝试定位元素时将DOM轮询一段时间。

文档中的代码:

Selenium中的显式等待是您定义的代码,用于在继续执行代码之前等待某个条件发生。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0

ff = webdriver.Firefox()
ff.get("http://somedomain/url_that_delays_loading")
try:
    element = WebDriverWait(ff, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement")))
finally:
    ff.quit()

隐式等待是告诉WebDriver在尝试查找一个或多个元素时,如果它们不能立即可用,则会在一定时间内轮询DOM。

from selenium import webdriver
ff = webdriver.Firefox()
ff.implicitly_wait(10) # seconds
ff.get("http://somedomain/url_that_delays_loading")
myDynamicElement = ff.find_element_by_id("myDynamicElement")

答案 1 :(得分:-1)

我经常申请等待不要等待网站加载,但要加载所有我的js代码执行。这可能需要几秒钟,具体取决于脚本的大小和复杂程度。