Puppeteer - 仅使用 1 个浏览器实例
Puppeteer - Using only 1 browser instance
我是怎么做到的,所以在执行多个 puppeteer 任务时它只使用 1 个浏览器实例?即使在等待 browser.close() 之后,我正在抓取的网站仍在检测 创建 浏览器实例。所以如果我总是打开浏览器我就可以绕过它。
示例场景:
(async() => {
const browser = await puppeteer.launch({headless: true}); //
// Have this only run once ^^^^
// Command gets run, it should not make a new browser and instead go
// to make a new page
// VVVVVVVV
const page = await browser.newPage();
await page.goto(args[1]) // Go to the url the user specified
// do some stuff
await page.close();
//repeat from browser.newPage();
})();
有什么想法吗?
您可以启动浏览器一次,然后使用 puppeteer.connect()
。
chrome.exe --remote-debugging-port=9222
(async() => {
const browser = await puppeteer.connect({
browserURL: 'http://localhost:9222',
defaultViewport: null,
headless: true,
});
const page = await browser.newPage();
await page.goto(args[1]) // Go to the url the user specified
// do some stuff
await page.close();
browser.disconnect();
})();
除了另一个答案提到的puppeteer.connect(),这里还有一个
一个非常简单的方法是只创建一次浏览器。仅在之前未初始化的情况下对其进行初始化。只要确保浏览器变量在您拥有的任何范围之外,如果它是一个快速应用程序,请确保它在路由之外。
let browser;
(async() => {
if(!browser) browser = await puppeteer.launch({headless: true});
const page = await browser.newPage();
await page.goto(args[1]) // Go to the url the user specified
// do some stuff
await page.close();
})();
我是怎么做到的,所以在执行多个 puppeteer 任务时它只使用 1 个浏览器实例?即使在等待 browser.close() 之后,我正在抓取的网站仍在检测 创建 浏览器实例。所以如果我总是打开浏览器我就可以绕过它。
示例场景:
(async() => {
const browser = await puppeteer.launch({headless: true}); //
// Have this only run once ^^^^
// Command gets run, it should not make a new browser and instead go
// to make a new page
// VVVVVVVV
const page = await browser.newPage();
await page.goto(args[1]) // Go to the url the user specified
// do some stuff
await page.close();
//repeat from browser.newPage();
})();
有什么想法吗?
您可以启动浏览器一次,然后使用 puppeteer.connect()
。
chrome.exe --remote-debugging-port=9222
(async() => {
const browser = await puppeteer.connect({
browserURL: 'http://localhost:9222',
defaultViewport: null,
headless: true,
});
const page = await browser.newPage();
await page.goto(args[1]) // Go to the url the user specified
// do some stuff
await page.close();
browser.disconnect();
})();
除了另一个答案提到的puppeteer.connect(),这里还有一个
一个非常简单的方法是只创建一次浏览器。仅在之前未初始化的情况下对其进行初始化。只要确保浏览器变量在您拥有的任何范围之外,如果它是一个快速应用程序,请确保它在路由之外。
let browser;
(async() => {
if(!browser) browser = await puppeteer.launch({headless: true});
const page = await browser.newPage();
await page.goto(args[1]) // Go to the url the user specified
// do some stuff
await page.close();
})();