微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python Selenium execute_script“ return window.dataLayer”返回陈旧的引用?什么陈旧?都还在那里

如何解决Python Selenium execute_script“ return window.dataLayer”返回陈旧的引用?什么陈旧?都还在那里

我可以看到execute_script()在我正在测试的AngularJS路由的单个页面中运行很多次,因为似乎很多代码都使用execute_script()与浏览器对话。

具体呼叫是:

driver.execute_script("return window.dataLayer")

成功工作了多次

但是在某些时候,该命令从Selenium接收到404。我挖了python硒:

深入urllib3中,它的发布与其他时间相同:

ipdb> urlopen_kw                                                                                                
{'body': '{"script": "return window.dataLayer","args": []}','request_url': 'http://127.0.0.1:51673/session/<sessionidxxx>/execute/sync'} 

但是在测试的同一位置,突然来自请求的响应是:

ipdb> data
'{"value":{"error":"stale element reference","message":"stale element reference: stale element not found\\n  (Session info: chrome=84.0.4147.105)","stacktrace":"#0 0x561877802d99 \\u003C
unkNown>\\n"}}'

我正在使用Ubuntu:

/usr/bin❯ chromium-browser --version
Using PPAPI flash.
Chromium 84.0.4147.105 Built on Ubuntu,running on Ubuntu 18.04

/usr/bin❯ chromedriver --version    
ChromeDriver 84.0.4147.30

通过以下方式找到了ChromeDriver:https://chromedriver.chromium.org/downloads/version-selection

使用pdb,我仍然可以完美地使用execute_script(<command>)页面及其上的所有内容进行交互。而且网址没有改变,页面也没有刷新。

似乎特定的window.dataLayer(虽然在浏览器开发者控制台中仍然存在并完整)在某种程度上是“陈旧的”。它缓存在某个地方吗?在网络驱动程序中?有办法阻止这种情况吗?

我唯一可以建立的连接是,当我仅将dataLayer对象用于一个评估时,它似乎没有中断。但是我增强了代码以循环查看dataLayer(在获取一次之后)。它不会立即过时。但是,在更大的交互触发XHR和其他请求之后,突然它说这是陈旧的。非常令人困惑。

我希望这对于某些人来说是足够的信息,以找出可能的原因。

非常感谢!

解决方法

当您循环浏览元素时,对它们执行一些操作。看起来您的页面正在刷新。结果,您先前存储的任何一个元素都将被重新加载或完全丢失。克服陈旧元素的一种技术是循环,对于每次迭代,请为您的元素使用一个新的定位器,并借助循环的迭代次数对其进行访问。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?