1、前言

通过selenium中find_elements_by_partial_link_text()函数获取网页中符合条件的链接文本列表,并挨个点击,出现了如下两种错误。

2、准备

2.1、手写HTML文件用于实验

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>实验</title>
</head>
<body><p contenteditable="true" spellcheck="true">这是可编辑的段落。请试着编辑文本。</p><a href = "https://weread.qq.com/">微信读书</a><a href = "https://fanqienovel.com/">微番茄小说</a>
</body>
</html>

3、只能点击进入列表中第一个连接文本

from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get(r'file:///C:/Users/%E%88%B%E9%9D%9E/Desktop/exe.html')links = driver.find_elements_by_partial_link_text('微')
for link in links:link.click()time.sleep(5)

links为列表形式,包含两个链接文本,①微信读书、②微番茄小说。

运行如上代码,只能点击进入第一个链接文本(微信读书),然后报错如下:

Message: stale element reference: element is not attached to the page document (Session info: chrome=110.0.5481.97)

4、在列表中第一个链接文本里嵌套查找

对上述代码进行修改,能够成功运行,但不是预期结果

from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get(r'file:///C:/Users/%E5%88%98%E5%BB%BA%E9%/Desktop/exe.html')
link1 = driver.find_elements_by_partial_link_text('微')
link1[0].click()
time.sleep(15)
link2 = driver.find_elements_by_partial_link_text('微')
link2[1].click()

使用如上代码,每点击一次就重新使用driver查找一次,生成新的link,基于这个思路得到如上代码,最后能够成功运行,但效果如下:(原因应该是“微信读书”覆盖了当前网址,所以第二次查找就基于“微信读书”进行。)

运行link1[0].click(),进入微信读书

运行link2[1].click(),则是在微信读书的基础上,进行了查找,进入了微信图书内部的界面

5、解决办法

from selenium import webdriver
import timedriver = webdriver.Chrome()for i in [0,1]:driver.get(r'file:///C:/Users/%E5%8BB%BA%E%9E/Desktop/exe.html')link = driver.find_elements_by_partial_link_text('微')link[i].click()time.sleep(5)

Message: stale element reference: element is not attached to the page document (Session info: chrome=110.0.5481.97)指过时的元素引用,元素未附加到页面文档,每点击一次就重新get(url)。运行后,得到预期结果。

该方法不是太好。

    推测:运行上述代码,点击链接文本后,并没有跳转到新的页面,而是覆盖了当前页面,所以会有“过时的元素引用,元素未附加到页面文档”的错误。所以可通过在新的页面打开链接文本的方式避免该错误,参考如下代码:

from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get(r'file:///C:/Users/%E%88%BA%E9%9D%9E/Desktop/exe.html')links = driver.find_elements_by_partial_link_text('微')
for link in links:href = link.get_attribute("href")driver.execute_script(f'window.open("{href}", "_blank");')time.sleep(5)

成功解决,效果如下:

[python] Message: stale element reference: element is not attach to the page document相关推荐

  1. selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element

    在输入框输入内容,点击[查询],然后点击页面上的[处理],并进行点击时,报错,报错内容如下. selenium.common.exceptions.StaleElementReferenceExcep ...

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

    背景:获取一组按钮,数量不确定,得到所有按钮A之后使用get_attribute("innerHTML")获取xpath并用A.find_element来获取每个按钮 代码如下: ...

  3. Selenium | 引用WebElement时报错stale element reference: element is not attached to the page document

    当项目中需要断言文本是否在元素列表的文本集中时,在对元素列表中的元素for循环遍历进行WebElement.text 操作时,随机性的出现state element reference的报错信息 源代 ...

  4. stale element reference: element is not attached to the page document 异常

    stale element reference: element is not attached to the page document 异常 参考文章: (1)stale element refe ...

  5. 关于报错stale element reference: element is not attach

    1.现象 在执行脚本时,有时候引用一些元素对象会抛出如下异常 org.openqa.selenium.StaleElementReferenceException: stale element ref ...

  6. 【Selenium】stale element reference 问题解决方案

    问题现象 如截图所示,异常原因:stale element reference: element is not attached to the page document 用例执行环境 java 1. ...

  7. 已解决 selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element 找不到元素的问题

    场景 使用selenium的find_element_by_xpath()函数报错:selenium.common.exceptions.NoSuchElementException: Message ...

  8. Message:Unable to locate element 问题解决方法

    Message:Unable to locate element 问题解决方法 参考文章: (1)Message:Unable to locate element 问题解决方法 (2)https:// ...

  9. element is not attached to the page document报错解决办法

    element is not attached to the page document报错解决办法 1.场景:将一条子单记录合并到母单记录,子单记录消失后,再次定位母单记录的操作按钮,报错 代码如下 ...

最新文章

  1. 电大计算机应用基础 课程考核3,电大专科-计算机应用基础作业3答案.doc
  2. C# 利用Newtonsoft.Json将DataTable进行JSON序列化
  3. SOLID 设计原则
  4. TVS二极管,双向封装,如何选型?
  5. 【转】浏览器缓存机制
  6. extjs4动态生成多表头
  7. mongodb 备份压缩_MongoDB的备份与恢复
  8. java 多线程 关键字_Java多线程常用的几个关键字
  9. 用C语言统计给定文本文件中汉字的个数
  10. 数据分类分级指南数据服务分类类目表
  11. Pycharm 主题设置和修改
  12. 小米pro 笔记本 计算机,小米笔记本Pro 15
  13. 【Web安全笔记】之【6.0 内网渗透】
  14. 计算机工作多少,一台普通计算机能工作多少电量?
  15. djyvp计算机电缆连接,DJYVP 计算机电缆DJYVPDJYVP电缆
  16. Bug:正试图在 OS 加载程序锁内执行托管代码
  17. 计算机科学论文写作5-写硕士论文
  18. python unpacking_Python解包(Unpacking)
  19. linux之if [ $? -ne 0 ];
  20. 布线工程施工经验介绍 解决XP局域网访问故障

热门文章

  1. 软件测试基础知识整理,都给你准备好了
  2. 三行python代码画桃心
  3. 使用pcomm.dll控制道闸开关
  4. 详解 Calico 三种模式(与 Fannel 网络对比学习)
  5. 可行性分析【软件工程总结】
  6. 编写shell脚本扫描出局域网所有ip设备的mac地址
  7. 这操作真香!Android高级工程师每日面试题精选,面试必备
  8. Java的对象和类,构造器详解
  9. python基础------继承特性
  10. 维护开源项目太难,Redis之父:只做自己想做的