重用浏览器实例 puppeterr

ski*_*boy 3 node.js puppeteer

我想知道是否可以有一个 .js 文件来打开浏览器实例、创建新页面/选项卡登录到网站(使用用户名/密码)并保持空闲状态。
在第二个 .js 文件中使用文件一个浏览器实例及其页面。

1.js

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch({ 
        headless: true,
        args: ['--no-sandbox'], 
        ignoreDefaultArgs: ["--hide-scrollbars"]
    });

    const page = await browser.newPage();
    const response = await page.goto('https://google.com');

    console.log('Browser open in the background (headless)!');
    //await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)

2.js

const puppeteer = require('puppeteer');

(async () => {
    // instructions on browser instance/page from 1.js ...
})();
Run Code Online (Sandbox Code Playgroud)

ski*_*boy 7

\n

爬虫对象保留浏览器实例的状态,并且无论您在何处调用/传递该实例,它都会引用“后台”中的同一个 chromium。如果这太过分了,而您只想使用 puppeteer 连接到已经运行的 chromium,则可以使用 puppeteer.connect 来完成。看看这个:\n 如何将 puppeteer“挂钩”到正在运行的 Chrome 实例/选项卡\xe2\x80\x93 mbit

\n
\n\n

是的,我想这对我来说太过分了:)。但你发布的链接是我想要的,但有两个问题。

\n\n

这是我所拥有的样本。

\n\n
// 1.js\n// open chromium, new tab, go to google.com, print browserWSEndpoint, disconnect\nconst puppeteer = require(\'puppeteer\');\n\n(async () => {\n    var browser = await puppeteer.launch({headless: false});\n    var page = await browser.newPage();\n    var response = await page.goto(\'https://google.com\');\n\n    var browserWSEndpoint = browser.wsEndpoint();\n    console.log(browserWSEndpoint); // prints: ws://127.0.0.1:51945/devtools/browser/6462daeb-469b-4ae4-bfd1-c3bd2f26aa5e\n\n    browser.disconnect();\n})();\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
// 2.js\n// connect to the open browser with the browserWSEndpoint manualy put in, ... , disconect. \nconst puppeteer = require(\'puppeteer\');\n\n(async () => {\n    var browser = await puppeteer.connect({browserWSEndpoint: \'ws://127.0.0.1:51945/devtools/browser/6462daeb-469b-4ae4-bfd1-c3bd2f26aa5e\'});\n\n    // somehow use the tab that is open from 1.js (google.com)\n\n    await browser.disconnect();\n})();\n
Run Code Online (Sandbox Code Playgroud)\n\n

我从 console.log 1.js 获取 browserWSEndpoint 字符串。\n效果很好,但我有两个困难。

\n\n

1 - 如何使用 1.js 中的变量 browserWSEndpoint,这样我就不必总是将其复制粘贴到 2.js。

\n\n

2-如果我在 1.js 上打开一个新页面/选项卡,然后转到 google 并断开连接 (browser.disconnect()),如何在 2.js 上使用该页面/选项卡。

\n