execute_script()
我可以在我正在测试的 AngularJS 路由单页中多次观看运行,因为似乎有很多代码用于execute_script()
与浏览器对话。
具体调用如下:
driver.execute_script("return window.dataLayer")
成功多次。
但是在某些时候,相同的命令会从 Selenium 收到 404。我深入研究了python selenium:
在 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>)
与页面及其上的所有内容进行交互。并且 URL 没有改变,页面也没有刷新。
似乎以某种方式特定的window.dataLayer
(虽然仍然存在并在浏览器开发控制台中完成)是“陈旧的”。它是否缓存在某个地方?在网络驱动程序中?有没有办法阻止它?
我可以建立的唯一联系是,当我只使用 dataLayer 对象进行一次评估时,它似乎没有中断。但是我增强了代码以循环查看 dataLayer(在获取一次之后)。它不会立即变得陈旧。但是在触发 XHR 和其他请求的更大交互之后,它突然说它已经过时了。非常混乱。
我希望这是足以让某人认识到可能是什么原因的信息。
非常感谢!