Selenium Python中的嵌套循环中的staleelementreferenceexception

时间:2018-03-15 15:47:14

标签: python selenium web-scraping

最近我试过刮,所以这次我想从一页到另一页,直到我得到我想要的最终目的地。这是我的代码:

  sub_categories = browser.find_elements_by_class_name("ty-menu__submenu-link")                   
   for sub_category in sub_categories:
       sub_category = str(sub_category.get_attribute("href"))            
       if(sub_category is not 'http://www.lsbags.co.uk/all-bags/view-all-handbags-en/' and sub_category is not "None"):
          browser.get(sub_category)
          print("Entered: " + sub_category)


          product_titles = browser.find_elements_by_class_name("product-title")


          for product_title in product_titles:
              final_link = product_title.get_attribute("href")

              if(str(final_link) is not "None"):
                 browser.get(str(final_link))
                 print("Entered: " + str(final_link))
                 #DO STUFF

我已经尝试过从这里做waitwrapper(尝试和例外)解决方案,但我不知道为什么会发生这种情况,我知道为什么会发生这种情况,因为它browser迷路了吗?当它完成一个项目?

我不知道如何表达这个想法。在我看来,我想它会是这样的:

时间表:

*第1页在一个循环中,其中的所有URL一个接一个地处理

*第1页的第一个网址被抓住了。因此,browser.get页面转到第2页

* PAGE 2有我要评估的链接的最终列表,所以这里有另一个循环 获取该网址,并在该网址#DO STUFF

* #DO STUFF到达第2页的第二个网址后再次#DO STUFF

*让我们假设第2页只有两个网址,所以它完成了循环,所以它会回到第1页

*第1页的第二个网址被抓住了......

依此类推......我想我已经在我的代码的一些内容中表达了我的想法,我不知道哪个部分不起作用因此返回异常。

感谢任何帮助,请帮忙。谢谢!

1 个答案:

答案 0 :(得分:0)

问题是,在导航到下一页但到达此页面之前,Selenium会找到您要等待的元素,但这是您来自的页面的元素,在加载下一页后,此元素未连接到了Dom,但是被新页面替换了,但是Selenium将与之前页面的元素进行交互,这些元素不再附加到Dom,给出了StaleElement异常。

按下下一页的链接后,必须等到下一页完全加载后再重新开始循环。

所以你必须在你的页面上找到一些东西,而不是你要与之交互的元素,这会告诉你下一页已被加载。