问题标签 [chrome-devtools-protocol]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
203 浏览

protractor - 量角器 - 获取 sendChromiumCommand 的结果

目标:获取 chromium 命令执行的结果,例如Profiler报告数据

我所做的:我可以使用browser.driver.sendChromiumCommand.

例如await browser.driver.sendChromiumCommand('Page.reload', {})重新加载页面,所以我可以确认这是有效的。

问题:任何命令执行的结果总是null

这是我的代码

注意:问题与特定命令无关,所有devtools 命令都返回null

0 投票
1 回答
1597 浏览

chrome-devtools-protocol - 赛普拉斯无法连接到 Chrome DevTools 协议:TCPConnectWrap.afterConnect 处的 ECONNREFUSED

我只是想在集成下的示例文件夹中运行一些测试,它不会在 Chrome 上运行。在 Electron 和 Edge 上运行,但在尝试失败后拒绝在 Chrome 上运行并抛出附加错误。

我的 Chrome 版本是 86.0.4240.111(官方构建)(64 位)

当前的赛普拉斯版本是 - cypress": "^5.5.0

启动浏览器时出错

0 投票
1 回答
3800 浏览

node.js - NodeJS - 错误:连接 ECONNREFUSED 127.0.0.1:port (chrome-remote-interface)

我使用chrome-launcherchrome-remote-interface制作了一个脚本,以使用 Chrome 将网页保存为 pdf。

它在我的 Windows 机器上运行没有任何问题,但是当我在 CentOS 7 上尝试它时,我收到以下错误,我不知道为什么。两者都使用 Chrome v86。

在 Windows 上我使用 NodeJS v12.18.4 在 Linux 上我尝试了 v15.1 和 v12.19

SELinux 状态:禁用

我试图检查其他应用程序是否正在使用错误中的端口并且没有。

我的代码:

如果您有其他使用 Chrome 并缩放到 0.7 的方法,请告诉我。

谢谢

0 投票
0 回答
355 浏览

chrome-devtools-protocol - Chrome DevTolls 协议的 Fetch.enable 不会导致所有请求都被拦截

我通过 DevTools 协议向正在运行的 Google Chrome 实例发出这样的消息:

我期待它会为页面下载的每个脚本文件引发“Fetch.requestPaused”事件。它仅适用于<head>页面部分中提供的资源,例如<script src="..."/>

如果<script src="..."/>包含在页面的任何其他部分(即标题之外),则不会被拦截,并且不会发出“Fetch.requestPaused”事件。任何人都知道如何拦截这些请求(我需要在响应到达浏览器之前对其进行修改)。

0 投票
1 回答
559 浏览

r - 如何使用 Chrome DevTools 协议单击元素?

我正在使用 chromote R 包,并且正在使用闪亮的应用程序对其进行测试。我正在尝试单击应该复制几个选择元素的图标。但是当我截屏时,我所拥有的只是工具提示,如果我打开浏览器,它会冻结 R 进程。

这是我的代码:

我不知道如何调试它,也没有太多关于如何点击的信息,我在 GitHub repo for chromote 中发现 dispatchMouseEvent 有问题。

回购链接https://github.com/rstudio/chromote

我想使用 chromote 的原因是我想为我的应用程序创建单元/集成测试,而 shinytest 已经过时了,它使用了几年前被遗弃的 phantomJS(所以你需要使用非常旧的 JavaScript,否则 pantomJS 会抛出错误并进行测试将失败)并且RSelenium也不再维护。

0 投票
1 回答
107 浏览

puppeteer - Target.sendMessageToTarget 已弃用——我现在如何使用 devtools 协议的扁平化风格?

现在,我通过将实际消息包装成Target.sendMessageToTarget消息来向目标发送命令。我认为使用“扁平化”版本我只需要sessionId在请求中添加作为参数,但这似乎不起作用,例如:

我究竟做错了什么?https://chromedevtools.github.io/devtools-protocol/tot/Target/#method-sendMessageToTarget

0 投票
0 回答
156 浏览

google-chrome - DOMDebugger.getEventListeners 不返回 backendNodeId

我按照文档https://chromedevtools.github.io/devtools-protocol/tot/DOMDebugger/#method-getEventListeners尝试了 DOMDebugger.getEventListeners。我可以获得事件侦听器数组,但每个对象中没有 backendNodeId。但我需要 backendNodeId 来获取节点对象。我在这里缺少什么吗?

在此处输入图像描述

chrome.debugger.sendCommand({tabId:tabId}, "DOMDebugger.getEventListeners", {objectId, depth: -1}, (listeners) => { console.log(listeners); });

谢谢!

0 投票
0 回答
880 浏览

google-chrome-devtools - Chrome DevTools 协议获取域 - getResponseBody - 显然因 HTTP 重定向而失败

我希望收集 HTTP 请求的正文,包括页面重定向到其他地方时。显然,我可以使用非 Fetch 域机制,例如Network.getResponseBody. 这适用于重定向链中的“最终”页面,但不能用于中间页面,因为 Chrome 在转到下一个重定向目标时似乎会转储内容。

所以,我实现了(使用 PHP,但细节无关紧要,如您所见)。此方法调用不返回错误。然后做 a 之后,我等待一个包含 members 的事件,然后发送a (使用from the ),我得到的响应取决于对页面本身的实际响应是什么。因此,对于 a ,我得到一个响应正文(欢呼),但对于 30x (等),我总是得到带有消息的错误代码。现在,发出该错误消息(在我看来)与Fetch.enable( { patterns: [ { requestStage: Response } ] } )Page.navigateFetch.requestPausedrequestIdresponseStatusCoderesponseHeadersFetch.getResponseBodyrequestIdFetch.requestPaused200301302-32000"Can only get response body on requests captured after headers received"Fetch.requestPaused事件数据,即使 Chrome DevTools 协议 (CDP) 并非旨在捕获 HTTP 重定向页面的正文。顺便说一句,带有内容触发重定向(通过 META 元素或 JavaScript)的页面可以被捕获,我认为是因为它们返回 200 状态代码。

那么,问题是我正在遵循的调用顺序还是返回的错误消息中的问题,Fetch.getResponseBody我是否正确地假设 CDP 不打算捕获重定向链中的文档主体(显然,除了最后一个)?

0 投票
0 回答
340 浏览

puppeteer - Page.createIsolatedWorld grantUniveralAccess 标志不授予通用访问权限

我正在尝试使用Runtime.evaluate. 据我了解文档,这应该可以通过使用+ [1]创建executionContext具有通用访问权限并将返回的传递给as来实现。Page.createIsolatedWorldgrantUniveralAccess: trueexecutionContextIdRuntime.evaluatecontextId

有任何想法吗?

chromium-browser --user-data-dir=/tmp/headless --remote-debugging-port=9000给定从[2]开始的铬工艺。

[1] 我本来希望通用访问权限允许我以与--disable-web-security标志相同的方式访问跨源资源 - 这在内部授予通用访问权限

[2] 全头运行以便于调试(例如,看到完整的 cors 错误仅打印到控制台)——运行 with--headless也不起作用。

[3]

[4] 正确的参数名称是grantUniveralAccess(no sin univeral)。通过传递类型不正确的值(期望为布尔值)轻松验证

0 投票
1 回答
57 浏览

puppeteer - 是什么让执行上下文成为“默认”上下文?

在 Chrome 的 Puppeteer 中,ExecutionContextDescription.auxData您可以找到一个包含以下属性的对象isDefaulttypeframeId

frameId理解起来相当简单,但其他属性似乎没有在任何地方记录。是什么让执行上下文成为默认上下文?在任何给定时间,每个帧的执行上下文不是总是只有一个吗?