当前位置: 首页 > 知识库问答 >
问题:

selenium StaleElementReferenceException:元素未附加到python中的页面文档错误

龙星辰
2023-03-14

我正在尝试访问一系列的网页和递归。访问一个页面,然后返回,然后移动到下一个页面,依此类推。用我的代码,我可以访问第一页,然后返回到上一页,但我不能访问下一页,并得到一个陈旧的元素引用错误。我通读了关于这个错误的答案,但仍然不知道我的代码在哪里更改了状态...

下面是我的代码

"""Get the browser (a "driver")."""
# find the path with 'which chromedriver'
path_to_chromedriver = ('/Users/xxxx/Desktop/chromedriver')
browser = webdriver.Chrome(executable_path=path_to_chromedriver)

url = "http://www.presidency.ucsb.edu/index_docs.php"
browser.get(url)
#time.sleep(600) 

# 2008 Presidential Election
pe_2008 = browser.find_element_by_xpath(
"/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/ul/li[22]/ul/li[5]/a")

# 2012 Presidential Election
pe_2012 = browser.find_element_by_xpath(
 "/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/ul/li[22]/ul/li[6]/a")

# 2016 Presidential Election
pe_2016 = browser.find_element_by_xpath("/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/ul/li[22]/ul/li[7]/a")

pe_2016.click()

links = browser.find_elements_by_partial_link_text('campaign')

for i in range(len(links)):
    links[i].click()
    time.sleep(5)
    elems = browser.find_elements_by_xpath("//a[@href]")
    linkls = []
    for elem in elems:
        address = elem.get_attribute("href")
        if 'http://www.presidency.ucsb.edu/ws/' in address:
            linkls.append(elem)
    try:
        k = len(linkls)
        for j in range(k):
            linkls[j].click()
            time.sleep(5)
            browser.back()
            time.sleep(5)
    except Exception as e:
        print(e)


Video Transcript: Presidential Exploratory Committee Announcement
Message: stale element reference: element is not attached to the page document
  (Session info: chrome=63.0.3239.132)
  (Driver info: chromedriver=2.35.528157     (4429ca2590d6988c0745c24c8858745aaaec01ef),platform=Mac OS X 10.12.6 x86_64)

---------------------------------------------------------------------------
StaleElementReferenceException            Traceback (most recent call last)
<ipython-input-255-edb48028a541> in <module>()
      1 for i in range(len(links)):
----> 2     links[i].click()
      3     time.sleep(5)
      4     elems = browser.find_elements_by_xpath("//a[@href]")
      5     linkls = []

/Users/misun/anaconda/lib/python3.5/site-    packages/selenium/webdriver/remote/webelement.py in click(self)
     78     def click(self):
     79         """Clicks the element."""
---> 80         self._execute(Command.CLICK_ELEMENT)
     81 
     82     def submit(self):

/Users/misun/anaconda/lib/python3.5/site-    packages/selenium/webdriver/remote/webelement.py in _execute(self, command,     params)
    626             params = {}
    627         params['id'] = self._id
--> 628         return self._parent.execute(command, params)
    629 
    630     def find_element(self, by=By.ID, value=None):

/Users/misun/anaconda/lib/python3.5/site-    packages/selenium/webdriver/remote/webdriver.py in execute(self, driver_command,     params)
    310         response = self.command_executor.execute(driver_command, params)
    311         if response:
--> 312             self.error_handler.check_response(response)
    313             response['value'] = self._unwrap_value(
    314                 response.get('value', None))

/Users/misun/anaconda/lib/python3.5/site-        packages/selenium/webdriver/remote/errorhandler.py in check_response(self, response)
    235         elif exception_class == UnexpectedAlertPresentException and 'alert' in value:
    236             raise exception_class(message, screen, stacktrace, value['alert'].get('text'))
--> 237         raise exception_class(message, screen, stacktrace)
    238 
    239     def _value_or_default(self, obj, key, default):

StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
  (Session info: chrome=63.0.3239.132)
  (Driver info: chromedriver=2.35.528157     (4429ca2590d6988c0745c24c8858745aaaec01ef),platform=Mac OS X 10.12.6 x86_64)

共有1个答案

唐阳飙
2023-03-14

当您转到一个新页面时,上一页中的所有元素都将被销毁/失效。每次返回到起始页时都必须重新获取元素列表。

最好的解决方案可能是找到所有的元素,然后迭代它们以取出URL。然后,可以迭代URL列表而不是元素列表。

 类似资料:
  • 问题内容: 我有一个python函数,应该单击产品的所有选项: 单击2个元素后,出现此错误: 您能否告诉我为什么出现这种错误,以及如何成功完成所有要素? 问题答案: 您已经有了解释,并且“元素未附加到DOM”上的解决方案: 用于在Web应用程序中模拟选项卡式UI的一种常用技术是为每个选项卡准备DIV,但一次仅附加一个,其余的存储在变量中。在这种情况下,您的代码很可能引用了不再附加到DOM的元素(即

  • 所以我正在尝试制作一个在flickr上运行的程序,我已经准备好了所有的东西,直到cookies弹出,它打败了我。 我正在尝试切换到这个iframe,这样我就可以使用“全部接受”按钮。然而,iframe的ID是动态的,所以为了避免这个问题,我尝试以标题为目标。 但是我现在收到了这个错误消息。 我已经尝试添加了10秒的等待时间来给它加载时间,我知道错误的原因是元素不再连接到DOM,但我不知道要使用什么

  • 我知道这是一个重复的问题,但我没有得到解决方案,因此再问一次。 我正在使用selenium C#,并在同一页面上的同一个操作中得到上述错误。我的测试在本地机器上运行良好,但当我通过TFS在服务器上执行时,相同的测试不一致。 我在测试中做了一些更改,因为它在单击操作后重新加载DOM,现在我在本地机器上重新加载对象后检查它是否正常工作,但在服务器上不一致。如果选中了复选框,我需要取消选中。我在包含此复

  • 我在Minim Developer上发现了一种奇怪的行为;当我在控制台中运行以下代码时: Minium能够填写“描述”字段 但是,当我尝试在步骤定义中运行相同的代码时,出现以下错误: org . Mozilla . JavaScript . Wrapped exception:Wrapped org . open QA . selenium . staleelementreferenceexcep

  • 我正在使用C#和Selenium Chromedriver来做一个测试项目,以抓取谷歌地图。 在到达第二个循环之前,它运行良好: 返回: OpenQA. Selenium.过时元素引用:元素未附加到页面文档 这是我所有的代码: 任何帮助将不胜感激!

  • 我的程序抛出一条错误消息“stale element reference:element未附加到页面文档”。当我查看前面的帖子(如Python Selenium陈旧元素修复)时,我发现我没有在调用click函数后更新url。我更新了网址。然而,它并没有解决这个问题。谁能指出我哪里出错了?下面是我的代码: