【问题标题】:Getting error "Message: stale element reference: element is not attached to the page document".what i am doing wrong收到错误“消息:过时的元素引用:元素未附加到页面文档”。我做错了什么
【发布时间】:2020-08-19 12:54:34
【问题描述】:
connections=driver.find_elements_by_css_selector("a span[class='mn-connection-card__name t-16 t-black t-bold']")
        print(len(connections))
for connection in connections:
    if connection.text == "XXX":
        connection.click()
        break

我在 if 语句中收到以下错误:

过时的元素引用:元素未附加到页面文档

【问题讨论】:

  • 您了解导致陈旧元素的原因吗?阅读一些导致它的原因,然后一旦你理解它,你就会明白你需要在你的代码中修复什么。这个问题已经在互联网上和其他地方被问过很多次了。
  • 另外,您的 CSS 选择器没有遵循 CSS 选择器的一般样式。它看起来更像 XPath,如果不纠正它可能会出现问题。更好的 CSS 选择器是 "a span.mn-connection-card__name.t-16.t-black.t-bold"

标签: python selenium selenium-webdriver staleelementreferenceexception


【解决方案1】:

当您的脚本尝试对其执行某些操作的元素的属性发生更改时,会发生过时元素异常。如果您想单击带有文本“XXX”的跨度,可以直接单击它:

WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//a[span[text()='XXX']]")))

如果您的要求是循环遍历所有这些元素,那么:

connections=driver.find_elements_by_css_selector("a span[class='mn-connection-card__name t-16 t-black t-bold']")
        print(len(connections))
for i in range(len(connections)):

    connections=driver.find_elements_by_css_selector("a span[class='mn-connection-card__name t-16 t-black t-bold']") #Created Fresh element list, so it wont be stale 
     if connections[i].text == "XXX"
         connections[i].click
         break

【讨论】:

  • 谢谢拉胡尔。 STALE 问题已解决。但 if 语句导致另一个错误“列表索引超出范围”
  • 您在哪一行得到索引超出范围?自从您获得列表长度并尝试遍历它之后,您的页面是否也在发生变化?
  • 在 --if connections[i].text == "XXX".. 有一个自动建议搜索字段..当我输入一个字母时,它会显示匹配的名称列表它。如果名称匹配它应该点击它。
  • 如果您想根据搜索输入的文本点击,请看这个答案:stackoverflow.com/questions/63467976/…
猜你喜欢
  • 2022-01-25
  • 2020-11-13
  • 1970-01-01
  • 2018-10-23
  • 2023-03-24
  • 2021-12-19
  • 1970-01-01
  • 2019-09-30
  • 2022-08-17
相关资源
最近更新 更多