Puppeteer在非无头模式下打开一个空标签

and*_*rey 5 google-chrome-devtools puppeteer

当运行puppeteer(最后一个版本从npm - 0.13.0)并传递args到

puppeteer.launch({ headless: false })

使用空页面打开chrome作为第一个选项卡,并从第二个选项卡中的脚本打开实际页面.

const page = await browser.newPage(); 这是预期的行为吗?还是一个bug?

Bob*_*ngh 11

是的,这是预期的行为.它与打开Chrome浏览器完全一样.如果您关闭了第一个标签页,则浏览器将像使用Chrome浏览器一样关闭.需要至少打开一个选项卡才能使浏览器保持打开状态.如果您await browser.pages在启动浏览器时使用,则会返回当前打开的所有页面,该页面应为1:空白页面.

  • 谢谢,我知道 chrome 浏览器是如何工作的。我的问题更多是关于为什么它让第一个选项卡打开并为空并在第二个选项卡中打开实际测试页面,更重要的是,如何实际使用第一页,以便每个浏览器实例只有一个页面。 (5认同)
  • browser.pages是一个函数-即让pages =等待browser.pages(); (5认同)
  • 哦,所以`let pages = await browser.pages`返回一个页面数组。如果在启动后执行此操作,则数组中的第一个也是唯一的元素将是该打开选项卡。因此,您可以将其分配给变量`let page = pages [0]`,然后可以从那里使用该页面。 (4认同)

Joh*_*rty 10

解决方案是使用现有的标签/页面(不要打开一个新的)

// launch the browser
var browser = await puppeteer.launch({ headless: false });

// get existing tab/page (first item in the array)
var [page] = await browser.pages();

// load barcode tracking website
await page.goto('https://orcascan.com');
Run Code Online (Sandbox Code Playgroud)

  • 这是一个解构赋值,它获取数组的第一项。更多信息 -> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment (2认同)

OrA*_*yag 5

尝试这个:

const page = await browser.newPage();
const pages = await browser.pages();
if (pages.length > 1) {
    await pages[0].close();
}
Run Code Online (Sandbox Code Playgroud)