最近我试过刮,所以这次我想从一页到另一页,直到我得到我想要的最终目的地。这是我的代码:
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
我已经尝试过从这里做wait
和wrapper
(尝试和例外)解决方案,但我不知道为什么会发生这种情况,我知道为什么会发生这种情况,因为它browser
迷路了吗?当它完成一个项目?
我不知道如何表达这个想法。在我看来,我想它会是这样的:
时间表:
*第1页在一个循环中,其中的所有URL一个接一个地处理
*第1页的第一个网址被抓住了。因此,browser.get
页面转到第2页
* PAGE 2有我要评估的链接的最终列表,所以这里有另一个循环
获取该网址,并在该网址#DO STUFF
* #DO STUFF
到达第2页的第二个网址后再次#DO STUFF
。
*让我们假设第2页只有两个网址,所以它完成了循环,所以它会回到第1页
*第1页的第二个网址被抓住了......
依此类推......我想我已经在我的代码的一些内容中表达了我的想法,我不知道哪个部分不起作用因此返回异常。
感谢任何帮助,请帮忙。谢谢!
答案 0 :(得分:0)
问题是,在导航到下一页但到达此页面之前,Selenium会找到您要等待的元素,但这是您来自的页面的元素,在加载下一页后,此元素未连接到了Dom,但是被新页面替换了,但是Selenium将与之前页面的元素进行交互,这些元素不再附加到Dom,给出了StaleElement异常。
按下下一页的链接后,必须等到下一页完全加载后再重新开始循环。
所以你必须在你的页面上找到一些东西,而不是你要与之交互的元素,这会告诉你下一页已被加载。