我正在维护一个测试框架,我们一直在使用它来评估我们的web UI,它基于MasterDevs C# library的一个分支。为了赶上一些安全修复程序,我不得不将我们的无头Chrome可执行文件更新到最新的版本。
在完成参数更改和更新的选项之后,我还有最后一个问题无法解决:当我尝试运行一个简单的JS表达式(如document.body.outerHTML
)时,我总是得到相同的响应:
{
"id": 13,
"error": {
"code": -32000,
"message": "Execution was terminated"
}
}
字符串
我总是在尝试运行这个之前执行Runtime.enable
,我已经指定了执行上下文id,帧id值和附加到目标,以及尝试了各种建议的选项组合。
最后,我安装了Selenium来运行相同的设置,并使用Wireshark进行窃听,注意到Selenium很早就从Target.attachToTarget
响应中获取了会话ID,并在几乎每个命令中都发送了会话ID。我尝试做同样的事情,现在唯一的区别是我得到了回显的sessionId(就像Selenium一样),如下所示:
{
"id": 13,
"error": {
"code": -32000,
"message": "Execution was terminated"
},
"sessionId": "086FCC1BC3D0825D2B2C1A08742190CD"
}
型
我还搜索了所有我能找到的命令行开关和选项(以防有我不知道的安全设置),但都无济于事。为了彻底起见,这是我在Linux上运行下载的Chrome包所使用的脚本:
#!/bin/bash
./chrome-linux/chrome --remote-debugging-port=9720 --disable-gpu --bwsi --no-first-run --enable-automation --disable-notifications --remote-allow-origins=* --disable-client-side-phishing-detection --disable-sync --disable-features=ChromeWhatsNewUI
型
除了挖掘Chromium源代码的一个又一个片段之外,我感到不知所措。无论是“执行被终止”还是“-32000”,似乎都没有在论坛或网络搜索中与CDP一起出现。
先谢谢你了,大卫
1条答案
按热度按时间xt0899hw1#
所以,如果其他人遇到这个问题,我的一个同事帮助我找出了核心问题。
在这种情况下,问题并不直接与协议有关,而是与C.evaluate请求的序列化有关。
基本上,生成器没有正确地处理
timeout
这个可选属性,所以它在后台发送了一个0的超时(尽管我们从来没有设置过这个属性)。我希望发送(并认为我发送)
字符串
但我却在发送
型
这(并非不合理)意味着立即停止等待完成(“执行被终止”)。
我将属性更改为
型
然后就修好了
希望这能为其他人解决这种问题节省时间。