我正在抓取一个网站,www.lipperleaders.com http://www.lipperleaders.com/。我想提取新加坡的资金详细信息。我已经成功实现了下拉选择并提取了提交选项后出现的第一页的内容。但是当我尝试转到下一页(通过使代码单击下一个按钮)时,我收到错误'Element is no longer attached to the DOM'
.
我的代码大约有 100 行,但我可以大致了解代码的执行流程:
... # creating driver object and all the imports
def main():
...
result = find_elements_by_tag_name('span')
...
driver.find_element_by_id("ctl00_ContentPlaceHolder1_ucDataPager_btnNext").click()
main()
main()
这段代码对于第一页效果很好,但是当main()
单击下一步按钮后再次调用。在这个递归方法之前,我也尝试将其放入循环中,然后也出现同样的错误。
如果我编写相同的代码,例如:
# some code
result = find_elements_by_tag_name('span')
driver.find_element_by_id("ctl00_ContentPlaceHolder1_ucDataPager_btnNext").click()
# some code
driver.find_element_by_id("ctl00_ContentPlaceHolder1_ucDataPager_btnNext").click()
.
.
该代码工作正常,没有任何错误,下一页加载并执行之后编写的代码。但我不能写同样的driver.find_element_by_id().click()
对于 500 页,即使我也必须重复与每个页面相关的其余代码。这就是为什么我尝试循环或递归,但它对我不起作用。
请让我知道我的方法有什么问题。
问题是该元素被某些 JavaScript 分离。所以你应该让驱动程序等待该元素:这是通过设置来完成的implicitly_wait
, see:
from selenium import webdriver
ff = webdriver.Firefox()
ff.implicitly_wait(10) # seconds
...
myDynamicElement = ff.find_element_by_id("myDynamicElement")
from
http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#implicit-waits http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#implicit-waits
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)