Selenium和自定义Web扩展之间的通信



我正在使用Selenium(python)在网站上自动执行一些测试。由于Selenium的API非常有限,所以我正在使用Web扩展来执行高级JavaScript测试。

将结果从 webextension 传达回 python 脚本的正确方法是什么?到目前为止,我正在通过控制台.log消息传递它们,但如果目标站点覆盖 console.log()(),它会失败(无论如何它似乎很黑客)。

我可能会通过以下方式解决这个问题:

首先, 如果你可以控制 Web 扩展的源代码,那么我会添加一个简单的方法,将你的数据序列化为一种很好的格式,然后将其存储到浏览器的本地存储中。

!注意:如果您还没有使用过这个,请不要担心,网上有多个示例。您必须考虑到您的数据还被限制为5-10 MB的本地存储限制(因浏览器而异)。

其次, 您必须读取localStorage值。我看到两种方法可以做到这一点:

  • 利用底层基于 Selenium 的框架的 API(通常它们都有某种 localStorage/cookie API 调用)。例如:在大多数框架中,您可以使用 .execute() 命令(或 executeScript)来设置本地存储值:browser.execute('localStorage.setItem('PerduData', <dataObject>);');

  • 在脚本中使用纯 JavaScript 来设置相同的本地存储值


我相信有多种方法可以实现相同的结果。如果您擅长处理文件,还可以考虑将数据对象存储在其他浏览器或计算机 (OS)存储区域。

最后 ,我认为实现这一目标的最优雅方法是使用一些第三方存储,该存储具有公开的API,最终可以通过WebextensionSelenium脚本访问。

希望这有帮助!

最新更新