我在网上看到的最常见的等待操作是
driver.get(url)
# apply a wait now
但是,如果我在REPL中,我可以看到driver.get
是一个阻塞操作,在完成之前无法完成任何操作。
>>> driver.get(url)
# this blocks everything else until loading is complete
那么等待工作怎么样?如果有的话,不应该等到driver.get
之前宣布?
答案 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代码执行。这可能需要几秒钟,具体取决于脚本的大小和复杂程度。