Python,Selenium +陈旧元素引用

时间:2017-11-16 11:35:52

标签: python selenium

我试图访问网页, 保存我想要点击的页面的一组链接,然后 如果是for循环,我想点击每个链接(在页面上来回。这是代码:

from selenium import webdriver


driver = webdriver.Chrome(executable_path='/Applications/chromedriver')
driver.get("webpage link") #insert link to webpage
list_links = driver.find_elements_by_xpath("//a[contains(@href,'activities')]")


for link in list_links:
    print(link)
    link.click()
    driver.goback()
    driver.implicitly_wait(10) # seconds
driver.quit()

但是,我第一次回到主页时收到错误消息:

StaleElementReferenceException: stale element reference: element is not attached to the page document.

任何人都可以帮我理解原因吗?建议一个解决方案? 谢谢。非常感谢。

2 个答案:

答案 0 :(得分:1)

您的mutate_(df, number = name) %>% mutate(number = as.numeric(substr(number, 6, 7) 仅适用于定义它的页面。首次单击重新创建的链接DOM后,对list_links元素的引用将变为无效。您可以在以下解决方案中申请:

list_links

P.S。我假设driver.implicitly_wait(10) # seconds list_links = [link.get_attribute('href') for link in driver.find_elements_by_xpath("//a[contains(@href,'activities')]")] for link in list_links: print(link) driver.get(link) driver.goback() driver.quit() 是您自定义的自定义方法,因为Selenium内置函数中没有这样的方法,只是goback()

P.P.S。请注意,您只能在代码中拨打back()一次,它将适用于所有下一次driver.implicitly_wait(10)来电

答案 1 :(得分:0)

很简单,你试图保存一个html(链接)的元素,这些元素不能被代码(循环逻辑)引用,这就是它抛出这个错误的原因。最重要的是你试图保存的硒对象,你不应该这样做。应该是你在数组中保存链接的确切值然后循环它们。