如何打印 puppeteer 发送的原始 devtools 请求?

Posted

技术标签:

【中文标题】如何打印 puppeteer 发送的原始 devtools 请求?【英文标题】:How to print the raw devtools request sent by puppeteer? 【发布时间】:2021-12-07 18:38:06 【问题描述】:

我看到 puppeteer 使用了 devtools 协议。我想看看 puppeteer 发送了哪些请求。

https://github.com/puppeteer/puppeteer

const puppeteer = require('puppeteer');

(async () => 
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.screenshot( path: 'example.png' );

  await browser.close();
)();

谁能告诉我如何修改上述简单程序以打印 puppeteer 发送的 devtools 请求?

编辑:由于代码在 nodejs 中,我添加了标签 nodejs 因为解决方案可能在 nodejs 而不是 puppeteer 中。如果此添加不合适,请发表评论。我将删除标签。在这种情况下,请不要关闭问题。

编辑:提琴手被提及为相关。所以我也添加了这个标签。

【问题讨论】:

你为什么要看他们?为什么要从程序中打印它们?使用 Fiddler 更有意义 Fiddler 无关紧要,因为我不是在调试网络应用程序。我想看看底层的 puppeteer 是什么。 它使用网络服务,因此可以将 Fiddler 设置为代理。但你为什么需要它? 我只是想看看幕后发生了什么。如何使用 Fiddler 控制 devtools 协议? 在后台有网络服务调用。 chrome 运行一个网络服务服务器。该协议记录在此处chromedevtools.github.io/devtools-protocol 【参考方案1】:

您可以使用chrome-protocol-proxy 它捕获所有 CDP 消息。这里涉及一些额外的步骤。

    在调试模式下运行 google chrome 启动 chrome-protocol-proxy 使用 puppeteer.connect() 启动 puppeteer

按照逗号运行,您可能需要相应地更改它们

google-chrome-stable --remote-debugging-port=9222 --headless  # run chrome
chrome-protocol-proxy     # to display CDP messages  

从您的代码中删除这一行

const browser = await puppeteer.launch();

添加这一行

const browser = await puppeteer.connect("browserURL":"localhost:9223");

您可以提供browserWSEndpoint 而不是browserURL,您将通过localhost:9223/json/version 上的cURL 获得它

如果您想更深入地了解 CDP 和 puppeteer,您可能需要查看 Gettig Started with CDP

【讨论】:

以上是关于如何打印 puppeteer 发送的原始 devtools 请求?的主要内容,如果未能解决你的问题,请参考以下文章

通过 USB 将原始文本发送到打印机

通过 PrintServer 将原始 ZPL 发送到 Zebra 打印机不起作用

在linux上通过usb发送原始数据

使用Visual Basic将原始数据发送到ZPL打印机(MS Access 2000)

Python请求 - 打印整个http请求(原始)?

通过 Puppeteer 在 Discord 上发送消息(无机器人,无应用程序)