问题标签 [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 回答
464 浏览

node.js - 从完全不同的系统进程访问 Electron API

我正在寻找一种方法来捕获 VS Code 扩展主机窗口的屏幕截图。当我的扩展程序的测试正在运行时,此窗口会打开(这来自 VS Code 扩展程序的默认 Yeoman 模板)。

我不能使用我的扩展程序的上下文,因为扩展程序只能访问 VS Code API,并且 VS Code 在与 Electron 不同的 Node 进程(主进程或渲染器)中运行扩展。IPC 通过 API 使用,而不是在进程中运行扩展。

我可以在 Electron 渲染器进程中运行此代码(使用 DevTools 或作为 Electron 应用程序脚本的一部分)来捕获 Electron 窗口:

我已经验证将它放在 VS Code 窗口 DevTools 中会产生正确的数据 URI。

为了能够从不同的 Node 进程执行此操作,只知道代码窗口 PID,我想我会将调试器附加到 VS Code 扩展主机 Electron 窗口并使用 CDP 我会发出Runtime.evaluate调用以运行上述代码如果它被输入到 DevTools。

但是,我正在努力附加调试器。通常有两种方法可以做到:

  • kill -s SIGUSR1 <node-pid>适用于 Unix/macOS
  • process._debugProcess(proc.pid);适用于 Windows

我现在对 Windows 很感兴趣,所以我从一个新的 Node 进程发出 Windows 行。成功连接调试器后应该发生的事情是目标进程应该打印出如下内容:

但是,在我的情况下,这仅在我启动准系统 Electron 应用程序--inspect然后使用 issue时才有效process._debugProcess(proc.pid);,没有--inspect它不会引发错误,但也不会附加调试器。

0 投票
0 回答
411 浏览

websocket - Network.getResponseBody 通过 Websocket API

我想知道是否有人可能对通过 Websocket API 使用 Chrome Devtools 协议有任何经验,特别是在实时提取网络响应主体方面。我查看了https://www.igvita.com/2012/04/09/driving-google-chrome-via-websocket-api/,它有一个很好的初始示例,展示了如何启用网络和导航到一个页面,但我正在寻找是否有可能a)在闲暇时导航到页面,同时b)实时记录后续响应主体/如何通过Websocket API(或任何语言那件事)。感谢您的任何见解。

0 投票
0 回答
273 浏览

node.js - 如何模拟 Chrome devtools 调试目标

我正在尝试为 chrome devtool 协议创建一个虚假的调试器目标。我使用 nodejs 创建了一个简单的 http 服务器并开始在端口上列出9229(就像 nodejs 一样)。我实现了 2 url /json/version&/json它返回与 nodejs 完全相同的响应inspect。也开始到 websocket 服务器,但服务器获取的唯一请求是/json/version&/json并且远程目标中也不存在目标。

我的源代码如下

所以有人能弄清楚我错过了什么吗?

0 投票
1 回答
334 浏览

javascript - 在 Chrome Devtools 协议中,什么是 `injectedScriptId`?

例如,在 CDP 中,当执行Debugger.evaluateOnCallFrame以评估某个对象时,响应将包含一个objectId看起来像{injectedScriptId: 1, id: 413}. 并且injectedScriptId永远不会改变(至少我从未观察到它改变了)。idprop 似乎是内存中唯一的对象 id 。

相关(甚至更重要,但只是寻求确认)问题:idinobjectId是整个程序/过程中对象的唯一标识符吗?我可以依靠它来构建变量的序列化、无循环引用的字符串表示吗?

那么 的目的是injectedScriptId什么InjectedScript

0 投票
2 回答
3437 浏览

google-chrome - 如何在 VScode 的开发人员工具中在控制台上获取 JS 的输出

我正在学习 javascriptvscode并使用liveServer扩展来让我的 html 和 js 在 chrome 上运行……我在“inspect element->console”中看到我的 js 输出,效果很好……现在我已经看到 chrome 开发人员工具集成在vscode,您可以从帮助中在 vscode 中打开它们,然后选择开发人员工具.....但问题是我没有在那里得到我的 js 输出......如何做到这一点......我正在从 youtube 上的教程中学习—— “ https://www.youtube.com/watch?v=W6NZfCO5SIk ” 他正在做我想要的时间戳 16:11(可变部分)的确切事情。

我尝试更改 liveserver 的端口并将默认浏览器设置为 null 最终打开边缘浏览器。

当我使用实时服务器扩展时,这一切都会发生。

我希望我的 js 输出,console但我得到这个:

当更改 js 文件中的某些内容时,它会说

虽然输出chrome非常好

0 投票
1 回答
634 浏览

go - chromedp 得到无效的 CSRF 令牌错误;Puppeteer 和浏览器都可以

我正在使用 chromedp 来测试我的基于 Go 的网站。虽然我已经设法使用它进行了基本的登录测试,但当我尝试退出我刚刚登录的帐户时,我遇到了 CSRF 错误。

这是获取 CSRF 错误的测试函数及其主要助手。httpServerURL是正在运行的实时网络服务器的基本 URL,或者是httptest.Server.URL(无论哪种方式,我都会得到相同的 CSRF 错误):

这是它的输出:

奇怪的是,Puppeteer 程序不会像这样出错。最后,无论用户在我开始测试之前是否已经拥有一个帐户,我都没有得到任何 CSRF 错误的屏幕截图:

同样,当我尝试在 Safari 或 Chrome 中注册同一个帐户两次时,我收到一个正常的“此电子邮件地址已在使用”错误,而不是 CSRF 错误。如果有的话,我通过 chromedp 做错了什么?

0 投票
2 回答
816 浏览

python - 如何在没有硒的情况下使用 python 读取 chrome 控制台?

我想使用 Python3 阅读 chrome 的 js 控制台,而不需要任何 web 驱动程序,例如 selenium(机器人检测和东西)。

我已经尝试过 Chrome DevTools 协议 python 库,例如 chromewhip、pychrome 和 PyChromeDevTools,但我无法从控制台读取任何数据。

我想阅读 Runtime.consoleAPICalled 或 Log.entryAdded,但我不知道如何实现这些回调,因为这些库的文档没有指定任何内容。也没有找到任何例子。

有谁知道如何正确访问这些事件或提供它的其他库?

0 投票
1 回答
1153 浏览

java - Selenium WebDriver (java) 可以与浏览器的检查工具元素选择器交互吗?

通过使用 selenium,我可以访问位于检查选项卡中的浏览器元素选择器(浏览器中的 Ctrl + Shift + C)吗?

我想使用该选择器“指向”一个元素,并在浏览器中突出显示它。

例如,一些简单的事情,如:

WebElement elem = driver.findElement(By.id("userName")); elem.pointer();

这将在浏览器中将元素显示为突出显示/选中,检查选项卡的工作方式相同。示例图像

0 投票
1 回答
583 浏览

google-chrome-devtools - 使用 Puppeteer 和 Chrome DevTools 协议,如何获得 4 个性能计时指标?

要创建下面的屏幕截图,我打开了 Chrome 开发者工具,选择了“性能”选项卡,开始录制,打开https://www.ted.com,然后停止录制。这就是我所看到的:

在此处输入图像描述

我如何以编程方式使用 Puppeteer 和可能的Chrome DevTools Protocol,获得屏幕截图中圈出的 4 个指标?

0 投票
1 回答
3428 浏览

javascript - 如何使用 Puppeteer 和 Chrome DevTools 协议修改请求标头?(可能是 JS 语法问题)

我有以下 Typescript 函数,假设 Chrome 浏览器已经使用 Puppeteer 启动。下面使用的 Fetch 函数的文档可以在这里找到。

这是我看到的具体错误:

错误:协议错误(Fetch.continueRequest):无效参数标头:预期数组

如何解决此错误并成功修改request.headers?这是我无法弄清楚的愚蠢的 Javascript/Typescript 语法问题吗?