我只是想知道,在点击链接之前如何让浏览器等待?我的目标是从动态网页上抓取内容,内容是动态的,但我设法得到表单ID。唯一的问题是提交按钮仅在2-3秒后显示。但是,我的Firefox驱动程序在加载页面时立即开始单击链接(而不是动态部分)。
有什么方法可以让我的浏览器等待2-3秒,直到出现提交按钮?我尝试使用time.sleep()
但暂停了所有内容,提交按钮在time.sleep
期间不会显示,但在time.sleep
结束后2-3秒后显示。
答案 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
。