使用Selenium webdriver Python逐个单击链接

使用Selenium webdriver Python逐个单击链接,python,python-2.7,selenium,selenium-webdriver,Python,Python 2.7,Selenium,Selenium Webdriver,我制作的脚本搜索我感兴趣的字符串集,但我有错误。 如何解决以下问题: links = driver.find_elements_by_xpath("xpath") for x in range(0, len(links)): driver.implicitly_wait(2) links[x].click() try: driver.implicitly_wait(3) DO something driver.back()

我制作的脚本搜索我感兴趣的字符串集,但我有错误。 如何解决以下问题:

links = driver.find_elements_by_xpath("xpath")

for x in range(0, len(links)):
    driver.implicitly_wait(2)
    links[x].click()
    try:
        driver.implicitly_wait(3)
        DO something
        driver.back()
        print("Mission completed!!")
    except (ElementNotVisibleException, NoSuchElementException):
        driver.back()
        print("No action")

Error:
selenium.common.exceptions.StaleElementReferenceException: Message: The element reference is stale. Either the element is no longer attached to the DOM or the page has been refreshed.
in line: links[x].click()

点击链接做什么?如果单击后导航到另一个页面,那么迭代中的下一个页面将不再位于DOM中,实际上会变得过时

点击链接做什么?如果单击后导航到另一个页面,那么迭代中的下一个页面将不再位于DOM中,实际上会变得过时

一旦从列表
链接
中指向新页面元素,这些元素就会过时-您无法再使用它们

您可以改为使用以下代码:

links = [link.get_attribute('href') for link in driver.find_elements_by_xpath("xpath")]
for link in links:
    driver.get(link)
    # DO something

这将允许您获取引用列表,并在列表链接中重新定向到新页面元素后,使每个页面处于循环中

变旧-您无法再使用它们

您可以改为使用以下代码:

links = [link.get_attribute('href') for link in driver.find_elements_by_xpath("xpath")]
for link in links:
    driver.get(link)
    # DO something

这将允许您获取参考列表,并在循环中获取每页

thx man!你教了我很多好代码:)这是最好的方法吗?我的网站在搜索20个链接后看起来和谷歌一样。如果只有一个页面有20个链接,你可以按原样使用它,但是如果你有分页(多个页面,每个页面上有20个链接),那么你可以做另一个循环,点击
Next
按钮附加每个页面的链接,然后通过提供的循环。一个循环-收集链接,一个-跟踪引用列表中的链接thx man!你教了我很多好代码:)这是最好的方法吗?我的网站在搜索20个链接后看起来和谷歌一样。如果只有一个页面有20个链接,你可以按原样使用它,但是如果你有分页(多个页面,每个页面上有20个链接),那么你可以做另一个循环,点击
Next
按钮附加每个页面的链接,然后通过提供的循环。一个循环-收集链接,一个循环-跟踪引用列表中的链接