• home > webfront > browser > Puppeteer >

    Puppeteer远程通过chrome浏览器调试

    Author:zhoulujun Date:

    Puppeteer 是无头浏览器,但是对于截图合生成pdf等功能而言,我希望查看器页面效果(本地关闭headless即可),如何做?如何在浏览器中运行

    Puppeteer 是无头浏览器,但是对于截图合生成pdf等功能而言,我希望查看器页面效果(本地关闭headless即可),如何做?

    如何在浏览器中运行 Puppeteer

    官方案例:https://github.com/puppeteer/puppeteer/tree/main/examples/puppeteer-in-browser

    但是,分析下运行原理,主要是还是websock 双工通信

    Puppeteer调试原理

    调试是基于调试协议的,比如网页调试是 Chrome DevTools Protocol。

    Chrome DevTools 对接了 CDP 可以调试网页,我们用 VSCode Debugger 能调试网页同样也是对接了 CDP。

    d42cd097709ed197b6172dffe685d618.png

    puppeteer 能控制浏览器执行一些脚本,也是基于 CDP。

    这俩都需要浏览器在调试模式启动,也就是指定 remote-debugging-port。

    • remote-debugging-port: 指定远程链接服务chrome调试端口

    • remote-debugging-address: 一般情况下,chrome只允许使用 127.0.0.1 对启动的浏览器进行调试,设置该参数,可以允许其他电脑通过ip进行调试

    总体代码如下:

    const pageUrl 'https://www.baidu.com/'
    const browser = await puppeteer.launch({
      ignoreHTTPSErrorstrue,
      args: [
        '--no-sandbox',
        '--disable-setuid-sandbox',
        '--remote-debugging-port=18523',
        '--remote-debugging-address=0.0.0.0'
      ],
      // executablePath: Config.browser.path,
      headlesstrue,
      slowMo250
    })
    await page.setViewport({ width1680, height1920 })
    await page.goto(pageUrl, {
      waitUntil: 'networkidle0'
    })

    打开 http://127.0.0.1:18523/json 可以看到 puppeteer 的情况

    在json里面找到webSocketDebuggerUrl,加在http://127.0.0.1:18523/devtools/inspector.html 后面,就可以查看

    比如:

    http://127.0.0.1:18523/devtools/inspector.html?ws=127.0.0.1:18523/devtools/page/7E9F348DB6CC9A6876AA7824DE4A805B

    由于配置了 remote-debugging-address 所以在其他机器通过服务器ip访问调试,那么远程调试就是替换成你服务器的ip地址即可,比如:

    http://[远程服务器ip]:18523/devtools/page/7E9F348DB6CC9A6876AA7824DE4A805B


    ConnectOptions 

    https://pptr.dev/api/puppeteer.connectoptions

    const browser = await puppeteer.connect({
      browserWSEndpoint: 'ws://127.0.0.1:9222/...',
    });
    
    const page = await browser.newPage();
    
    browser.disconnect();

    在 Puppeteer 之外启动了浏览器,可以使用 connect 方法连接到它。

    属性

    修饰符

    类型

    描述

    默认值

    acceptInsecureCerts

    可选

    boolean

    是否在导航期间忽略 HTTPS 错误。

    false

    browserURL

    可选

    string



    browserWSEndpoint

    可选

    string



    capabilities

    可选

    SupportedWebDriverCapabilities

    传递给 BiDi `session.new` 的 WebDriver BiDi 功能。

    备注

    仅适用于 `protocol="webDriverBiDi"` 和 Puppeteer.connect()


    defaultViewport

    可选

    Viewport | null

    设置每个页面的视口。

    '{width: 800, height: 600}'

    downloadBehavior

    可选

    DownloadBehavior

    设置上下文的下载行为。


    headers

    可选

    Record<string, string>

    用于 WebSocket 连接的标头。

    备注

    仅在 Node.js 环境中有效。


    protocol

    可选

    ProtocolType


    在运行时确定

    • 启动 Chrome - 'cdp'。

    • 启动 Firefox - 'webDriverBiDi'。

    • 连接到浏览器 - 'cdp'。

    protocolTimeout

    可选

    number

    单个协议 (CDP) 调用的超时设置。

    180_000

    slowMo

    可选

    number

    将 Puppeteer 操作减慢指定的毫秒数,以帮助调试。


    targetFilter

    可选

    TargetFilterCallback

    用于确定 Puppeteer 是否应连接到给定目标的Callback。


    transport

    可选

    ConnectionTransport





    参考文章:
    把 puppeteer 融入调试流程,调试体验爽翻了! https://cloud.tencent.com/developer/article/2212255

    Puppeteer开发调试的4个Tip https://github.com/zhaoqize/blog/issues/26

    记一次远程调试headless puppeteer https://juejin.cn/post/7055555931412627493



    转载本站文章《Puppeteer远程通过chrome浏览器调试》,
    请注明出处:https://www.zhoulujun.cn/html/webfront/browser/Puppeteer/9427.html

    上一篇:第一页
    TOP