为什么将puppeteer-extra插件与puppeteer一起使用时隐身模式不起作用

时间:2019-06-03 09:38:58

标签: puppeteer

我正在将puppeteer-extra软件包与puppeteer的隐身插件一起使用。在使用默认的puppeteer软件包时,隐身显示,但在使用puppeteer-extra插件时,即使在初始化隐身上下文时,隐身窗口也不会打开。任何想法,如果它有一些兼容性问题或已经有人遇到了这个问题。

我尝试了通过“ --incognito”模式的args并也使用了上下文方法。

使用--incognito参数时,它将以隐身方式打开父窗口,而使用newPage()时,它将打开第二个没有隐身流程的窗口。

我使用过的两种方法

导入人偶额外的包裹:

import puppeteer from 'puppeteer-extra';
import pluginStealth from 'puppeteer-extra-plugin-stealth';

Method 1:
 const context = await browser.createIncognitoBrowserContext();
 const page = await context.newPage();

Method 2 :
 const browser = await puppeteer.launch({args:[--incognito]});

我希望在使用puppeteer-extra软件包时,其行为应与使用puppeteer相同。

1 个答案:

答案 0 :(得分:0)

问题

这似乎是由puppeteer-extra库中的错误引起的。当您使用puppeteer-extra打开一个puppeteer实例时,将对浏览器实例进行热修补,以更好地集成新打开的页面与插件。

不幸的是,browser._createPageInContext(从2.1.3版开始)的当前实现无法正确处理新页面一旦打开应属于哪个浏览器上下文。

修复

解决方法是this pull request。 具体来说,您需要更改此行

return async (contextId) => {

对此

return async function (contextId) {

以便正确评估下一行上的arguments

const page = await originalMethod.apply(context, arguments)