在正常启动时,浏览器可以变成无头执行吗,反之亦然?

时间:2019-04-23 10:31:08

标签: javascript node.js google-chrome-devtools puppeteer

我想无头启动Chrome浏览器,执行一些自动化操作,然后在执行其余操作之前将其打开。

使用Puppeteer可以做到吗,如果可以,你能告诉我如何吗?如果不是这样,是否还有其他用于浏览器自动化的框架或库可以做到这一点?

到目前为止,我已经尝试了以下方法,但是没有用。

const browser = await puppeteer.launch({'headless': false});
browser.headless = true;
const page = await browser.newPage();
await page.goto('https://news.ycombinator.com', {waitUntil: 'networkidle2'});
await page.pdf({path: 'hn.pdf', format: 'A4'});

1 个答案:

答案 0 :(得分:2)

简短的回答:这不可能

Chrome仅允许以 headless non-headless 模式启动浏览器。启动浏览器时必须指定它,并且在运行时无法切换。

可能的是,启动第二个浏览器并重用第一个浏览器中的cookie(以及任何其他数据)。

长答案

您会假设您可以在调用puppeteer.launch时重用数据目录,但是由于存在多个错误(操纵up回购中的#1268#1270),当前无法实现。

因此,最好的方法是在浏览器实例之间共享save any cookies或您需要在浏览器实例之间共享的本地存储数据,并在启动浏览器时还原数据。然后,您第二次访问该网站。请注意,当您重新爬网页面时,网站在JavaScript变量方面的任何状态都将丢失。

过程

总结起来,整个过程应该像这样(反之亦然,无头到头):

  • 以无头模式爬行,直到您要切换模式
  • Serialize cookies
  • 启动或重用第二个浏览器(无头模式)
  • 还原cookie
  • 重新访问页面
  • 继续爬网