【发布时间】:2022-01-21 02:17:18
【问题描述】:
我正在尝试在 python 中使用 selenium 和 chromedriver 从网站上抓取数据。登录网站后,我必须从一个下拉菜单中选择一些值,但我无法使用代码单击下拉菜单。我把代码写成:
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver,60)
element=wait.until(EC.element_to_be_clickable((By.XPATH,"//input[@id='ContentPlaceHolder1_rcmbCapacityTranch_Input']")))
element.click()
当我运行上述代码行时,我得到 StaleElementReferenceException: Message: stale element reference: element is not attached to the page document 但当我将 time.sleep(2) 包含为:
time.sleep(2)
element=wait.until(EC.element_to_be_clickable((By.XPATH,"//input[@id='ContentPlaceHolder1_rcmbCapacityTranch_Input']")))
element.click()
现在,它已成功执行并单击下拉菜单并显示值,但有时 2 秒的时间休息是不够的,我必须给 5 秒,有时我必须给 10 秒的时间休息,这会减慢执行速度,有时这 10 秒的休息时间也失败了。
我还尝试了以下代码行:
staleElement = True
while(staleElement):
try:
xpath="//input[@id='ContentPlaceHolder1_rcmbCapacityTranch_Input']"
element=wait.until(EC.element_to_be_clickable((By.XPATH,xpath)))
element.click()
staleElement = False
except StaleElementReferenceException:
staleElement = True
上述代码行成功执行,但未单击下拉菜单且未显示值,但是当我在 jupyter notebook 单元格中重新执行与上面相同的代码行时,下拉菜单被选中并显示值。
所以,谁能帮我解释一下我上面提到的事情背后的原因,并在没有sleep()的情况下给我解决问题的永久解决方案。
任何帮助将不胜感激。
【问题讨论】:
标签: python python-3.x selenium selenium-webdriver web-scraping