问题标签 [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 投票
2 回答
1457 浏览

javascript - Chrome DevTools 协议:如何获取节点的单击事件处理程序名称

问题

我有一个相同节点的列表,这些节点具有相同的处理程序或附加到它的函数。

我需要单击 DOM 中存在的每个交互节点(这是功能或要求)。

如果节点已被单击,或者节点具有相同的处理程序,我想跳过要单击的节点。

请在屏幕截图下方找到参考。其中事件侦听器有一个带有处理程序名称的 click 事件。我们可以获取点击处理程序或函数的名称吗?

我正在使用DOMDebugger.getEventListeners({ objectId: remoteObjectId }),但它不会返回handler and originalHandler不为什么。

在此处输入图像描述

0 投票
0 回答
133 浏览

google-chrome - 如何在更改 chrome 扩展中侦听可用的调试目标更改

我正在构建一个 Chrome 扩展程序。我已经通过 的方法获得了所有目标chrome.debugger.getTargets,我想听这个目标更改事件。然后我找到了 Target.setDiscoverTargets,所以我尝试使用以下代码。

但我收到一条错误消息。

Unchecked runtime.lastError: {"code":-32000,"message":"Not allowed"}

有人能告诉我为什么这个命令不允许,是 sendCommand 的目标第一个参数错误还是 chrome 扩展不支持这个方法?

0 投票
1 回答
6453 浏览

javascript - 如何在 playwright 中运行自定义 js 函数

如何在 playwright 中运行自定义 js 函数?例如显示警报。我已经尝试过这种方式,但没有奏效。

0 投票
0 回答
600 浏览

javascript - DevTools 无法加载 SourceMap:无法加载 file:///path/to/source.js.map 的内容

当我使用--inspect运行Node.js 打字稿项目时,我转到 URL“localhost:9229/json/list”并选择 URL“devtoolsFrontendUrlCompat”(注意:需要从 URL 的开头删除“chrome-”作为 GOOGLE chrome 团队再次弄乱了 URL,否则它将进入谷歌搜索)。

当开发工具在 URL "devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=localhost:9229/d34a4b4c-8583-43b7-90e3-bec3f1809995" 上启动时,我只在开发者上看到编译的 javascript 文件工具,但源地图未按以下屏幕截图加载:

[DevTools 无法加载 SourceMap][1]

几个月前,一切(包括源映射加载)都在工作,但现在当我尝试做同样的事情时,我只能看到编译后的 javascript 文件,但我无法调试 typescript 文件,因为 CHROME 无法加载这些源映射。我在网上到处搜索,很惊讶没有人问这个问题,而且真的很讨厌 GOOGLE chrome 团队因为每次发布都弄乱了 chrome。说真的,他们是最糟糕的

如果任何知道解决方案的 Node.js 开发人员可以在这里帮助我,那就太好了。请。

0 投票
0 回答
119 浏览

google-chrome - 是否可以在一个 CDP 会话中两次使用 CDP 方法的“Runtime.addBinding”?

我需要调查不同“bindingCalled”事件中的两个函数。我想知道是否可以?

0 投票
1 回答
847 浏览

node.js - 使用 devtool 协议从嵌入式 iframe 中捕获请求(XHR、JS、CSS)

对于上下文,我正在使用 Nodejs 和 puppeteer 开发一个综合监控工具。对于定义场景的每个步骤,我都会捕获屏幕截图、瀑布和性能指标。

我的问题出在瀑布上,我以前使用过 puppeter-har 但这个包无法捕获导航之外的请求。因此,我使用这段代码来捕获所有有趣的请求:

在步骤开始时:

在步骤结束时:

它适用于导航事件,也适用于 Web 应用程序内部的导航。但是,我尝试监控的 Web 应用程序具有包含主要内容的 iframe。我想在我的瀑布中看到 iframe 请求。

所以有几个问题:

  • 为什么 Network.responseReceived 或任何其他事件没有捕获此请求?
  • 是否可以捕获此类请求?

到目前为止,我已经修改了 devtool 协议文档,但我无法使用。我发现最接近我的问题的是这个问题: 如何使用 Chrome Devtools 协议接收嵌入式 iframe 的事件?

我的猜测是,我必须为可能遇到的每个 iframe 启用网络。我没有找到任何方法来做到这一点。如果有办法用 devtool 协议来做,我用 nodsjs 和 puppeteer 来实现应该没有问题。

感谢您的见解!

编辑 18/08:

在对该主题进行更多搜索后,主要是进程外 iframe,互联网上的很多人都指向该响应: https ://bugs.chromium.org/p/chromium/issues/detail?id=924937#c13

答案是问题状态:

请注意,最简单的解决方法是 --disable-features 标志。

也就是说,要通过 DevTools 协议处理进程外 iframe,您需要使用 Target [1] 域:

  • 使用 flatten=true 调用 Target.setAutoAttach;
  • 您将收到带有 iframe 的 sessionId 的 Target.attachedToTarget 事件;
  • 将该会话视为 chrome-remote-interface 中的单独“页面”。发送带有额外 sessionId 字段的单独协议消息:
    {id: 3, sessionId: "", method: "Runtime.enable", params: {}}
  • 您将获得具有相同“sessionId”字段的响应和事件,这意味着它们来自该帧。例如:
    {sessionId:“”,方法:“Runtime.consoleAPICalled”,参数:{...}}

但是我仍然无法实现它。

我正在尝试这个,主要基于 puppeteer :

但是对于 iframe 内的 Web 应用程序中的导航,我仍然没有预期的输出。

但是,我能够在加载 iframe 的步骤中捕获所有请求。我想念的是在正确导航之外发生的请求。

有没有人知道将上述铬响应整合到 puppeteer 中?谢谢 !

0 投票
1 回答
299 浏览

javascript - Chrome DevTools 协议:如何取消订阅 Page.javascriptDialogOpening 事件

我正在使用 Chrome DevTools 协议 API 函数来监听javascriptDialogOpening事件。下面是代码。

我收到一个错误:MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。增加了11Page.javascriptDialogOpening位听众。使用emitter.setMaxListeners() 增加限制

0 投票
1 回答
708 浏览

go - chromedp fails to start a new instance of chrome

Hey guys I have been trying to automate a task on my browser's machine using chromedp.

I tried examples on the repo however they always fail:

unexpected fault address 0x7f7a36461000 fatal error: fault [signal SIGBUS: bus error code=0x2 addr=0x7f7a36461000 pc=0x53a9d5]

Example's source code am running can be found here.

As I understand chromedp comes with headless pre-compiled version of chrome. I have browsed the API documentation to see if it possible to pass a port on which the dev tools is listening, no success.

However when I tried mafredri/cdp it worked. I came to understand that chromedp is failing to start its embedded chrome. Although, I am not really sure. Why is this happening?

My env:

Google Chrome 85.0.4183.102

Ubuntu 18.04.4 LTS

go version go1.13.5 linux/amd64

Any help would be truly appreciated.

0 投票
1 回答
117 浏览

javascript - CDP 中未引发 Debugger.paused 事件

我正在尝试使用 Chrome DevTools 协议暂停所有选项卡的执行。为此,我遍历所有选项卡以获取每个选项卡的 CDP 客户端,然后发送请求以在每个选项卡上暂停 JS。我看到它正确解决了某些选项卡,但不是全部。有什么理由会发生这种情况?

我用来暂停并等待暂停事件被触发的代码:

0 投票
1 回答
829 浏览

python - Selenium 3 python: add listener for Chrome DevTools network event

I am using Selenium 3 with python. Currently it is possible to send a Chrome DevTools command using the execute_cdp_cmd binding:

Is it possible somehow to add a listener for a Network Event? Something like:

It should be natively supported in Selenium 4 (currently in alpha), but I would like to know if it is possible to make this work in Selenium 3.