Chrome Devtools协议:错误,评估执行问题

gt0wga4j  于 2023-11-14  发布在  Go
关注(0)|答案(1)|浏览(97)

我正在维护一个测试框架,我们一直在使用它来评估我们的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一起出现。
先谢谢你了,大卫

xt0899hw

xt0899hw1#

所以,如果其他人遇到这个问题,我的一个同事帮助我找出了核心问题。
在这种情况下,问题并不直接与协议有关,而是与C.evaluate请求的序列化有关。
基本上,生成器没有正确地处理timeout这个可选属性,所以它在后台发送了一个0的超时(尽管我们从来没有设置过这个属性)。
我希望发送(并认为我发送)

{
    "command":"Runtime.evaluate",
    "params": {
        "expression": "document.body.outerHTML"
    }
}

字符串
但我却在发送

{
    "command":"Runtime.evaluate",
    "params": {
        "expression": "document.body.outerHTML",
        "timeout": 0
    }
}


这(并非不合理)意味着立即停止等待完成(“执行被终止”)。
我将属性更改为

public double? Timeout {get; set;}


然后就修好了
希望这能为其他人解决这种问题节省时间。

相关问题