【问题标题】:Run puppeteer on Chrome No chromium在 Chrome 上运行 puppeteer 无铬
【发布时间】:2021-02-16 10:27:03
【问题描述】:

我想用 puppeteer 打开 Telegram 网站

但是有一个问题 Telegram 会话仅在 Chrome 上打开

每次都必须使用 puppeteer 登录

有一种方法可以让 puppeteer 只在正在运行的 chrome 上运行以检测会话

const browser = await puppeteer.launch({
 headless : false,
 executablePath: "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",
 args: ["--lang=en-US,en", '--no-sandbox', '--disable-setuid-sandbox', '--disable-extensions']

})

此代码正常工作 但是在铬上

【问题讨论】:

    标签: node.js puppeteer telegram chromium


    【解决方案1】:

    是的,可以在预先存在的 Chrome 进程之上运行 puppeteer 实例。

    为了实现这一点,首先需要使用remote-debugging-port选项启动Chrome进程,通常定义为:--remote-debugging-port=9222

    这个Medium articule 非常详细地说明了如何实现这一点,但总结一下:

    • MAC 操作系统:

    运行:

    /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --no-first-run --no-default-browser-check --user-data-dir=$(mktemp -d -t 'chrome-remote_data_dir')
    
    • Windows:
    1. 右键单击您的 Google Chrome 快捷方式图标 => 属性
    2. 在目标字段中,添加到最后 --remote-debugging-port=9222 应该类似于:
    "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
    

    然后,您将能够导航到 http://localhost:9222/json/version(端口与您在上面定义的相同),并看到如下输出:

    {
       "Browser": "HeadlessChrome/87.0.4280.66",
       "Protocol-Version": "1.3",
       "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/87.0.4280.66 Safari/537.36",
       "V8-Version": "8.7.220.25",
       "WebKit-Version": "537.36 (@fd98a29dd59b36f71e4741332c9ad5bda42094bf)",
       "webSocketDebuggerUrl": "ws://localhost:9222/devtools/browser/000aaaa-bb08-55af-a8e3-760dd9998fc7"
    }
    

    然后,您可以像这样使用 puppeteer connect() 方法(而不是 launch() 方法):

      const browser = await puppeteer.connect({
        browserWSEndpoint: "ws://localhost:9222/devtools/browser/000aaaa-bb08-55af-a8e3-760dd9998fc7",
      });
      // now, 'browser' is connected to your chrome window.
      
      // get the opened pages
      const openedPages = await browser.pages();
    
      // filter out the one you want (telegram). not sure the best way to do it, please test it yourself
      const telegramPage = openedPages.filter(page => page.url().includes("telegram"));
    

    【讨论】:

      猜你喜欢
      • 2018-06-22
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      相关资源
      最近更新 更多