2014-12-22 30 views
9

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

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

回答

13

您可以设置等类似以下内容:

明确等待

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

完美的是,我需要什么,谢谢。只是为了澄清,明确的等待将适用于该元素,而隐性等待将适用于整个会话,我是否正确? – Kiddo

+0

是的,你是对的,如果你想要主要的差异。他们之间请参考:http://stackoverflow.com/questions/22656615/what-is-difference-between-implicit-wait-vs-explicit-wait-in-selenium-webdriver –

+1

@HelpingHands:上述两个等待你已经使用了Infact [**'Explicitwaits' **](http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-waits),而不是[**'Implicit waits' **](http: //docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#implicit-waits)。请检查并相应地编辑您的代码。 – Subh

1

您需要使用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秒钟的时间等因素的量。通过这种设置,硒将尝试每隔500毫秒定位一个元素,共计10秒。如果找不到元素,它会在10秒后抛出TimeoutException

+4

我学到了一些新的东西,这是element_to_be_clickable,谢谢 – Kiddo

相关问题