Python Selenium如何在点击链接之前等待

时间:2014-12-22 10:33:13

标签: python selenium selenium-webdriver

我只是想知道,在点击链接之前如何让浏览器等待?我的目标是从动态网页上抓取内容,内容是动态的,但我设法得到表单ID。唯一的问题是提交按钮仅在2-3秒后显示。但是,我的Firefox驱动程序在加载页面时立即开始单击链接(而不是动态部分)。

有什么方法可以让我的浏览器等待2-3秒,直到出现提交按钮?我尝试使用time.sleep()但暂停了所有内容,提交按钮在time.sleep期间不会显示,但在time.sleep结束后2-3秒后显示。

2 个答案:

答案 0 :(得分:15)

您可以设置等待如下:

明确等待

    element = WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.ID, "myElement"))

隐含等待:

 driver.implicitly_wait(20) # seconds
 driver.get("Your-URL")
 myElement = driver.find_element_by_id("myElement")

您可以使用上述任何一项。两者都有效。

答案 1 :(得分:5)

您需要使用Selenium Waits

特别是,element_to_be_clickable期望的条件更适合其他条件:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "myDynamicElement"))
)
element.click()

其中driver是您的webdriver实例,10是等待元素的秒数。通过这种设置,selenium将尝试每500毫秒定位一个元素,总共10秒。如果找不到元素,它会在10秒后抛出TimeoutException