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

Kid*_*ddo 10 python selenium selenium-webdriver

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

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

Hel*_*nds 15

您可以设置等待如下:

明确的等待:

    element = WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.ID, "myElement"))
Run Code Online (Sandbox Code Playgroud)

隐含等待:

 driver.implicitly_wait(20) # seconds
 driver.get("Your-URL")
 myElement = driver.find_element_by_id("myElement")
Run Code Online (Sandbox Code Playgroud)

您可以使用上述任何一种.两者都有效.

  • @HelpingHands :您使用的上述两种等待实际上都是 [**`Explicitwaits`**](http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-waits),而不是 [**`Implicit等待`**](http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#implicit-waits)。请相应地检查和编辑您的代码。 (2认同)

ale*_*cxe 6

你需要使用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()
Run Code Online (Sandbox Code Playgroud)

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

  • 我已经学到了新的东西,这就是element_to_be_clickable,谢谢 (4认同)