如何在Node.js中清除历史记录(清除浏览数据)Puppeteer Headless = false Chromium浏览器

时间:2019-04-26 16:28:56

标签: node.js google-chrome chromium puppeteer

我正尝试通过下面的代码在无头=错误的浏览器中使用node.js puppeteer删除历史记录,但方法无法正常工作。

await page.goto('chrome://settings/clearBrowserData');
await page.keyboard.down('Enter');

第二个代码

await page.keyboard.down('ControlLeft');
await page.keyboard.down('ShiftLeft');
await page.keyboard.down('Delete');
await page.keyboard.down('Enter');

我也尝试使用.evaluateHandle().click()函数,但是它们都不起作用。如果有人知道如何与人偶一起清除历史,请回答我。

1 个答案:

答案 0 :(得分:0)

无法像这样导航到浏览器设置页面(chrome://...)。

您有两个选择:

  1. 使用隐身窗口(在操纵up中称为上下文)
  2. 使用Chrome DevTools协议中的命令清除历史记录。
  3. 重新启动浏览器

选项1:使用隐身窗口

要清除历史记录(包括cookie和任何数据),可以在操纵up中使用名为“ BrowserContext”的“隐身”窗口。

您可以通过调用browser.createIncognitoBrowserContext()来创建上下文。引用docs

  

创建一个新的隐身浏览器上下文。这不会与其他浏览器上下文共享cookie /缓存。

示例

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

// Execute your code
await page.goto('...');
// ...

await context.close(); // clear history

此示例将创建一个新的隐身浏览器窗口并在其中打开一个页面。从那里开始,您可以像平常一样使用page句柄。

要清除其中的所有cookie或历史记录,只需通过context.close()关闭上下文。


选项2:使用Chrome DevTools协议清除历史记录

如果您不能依赖使用上下文(因为使用扩展名时不支持上下文),则可以使用Chrome DevTools Protocol来清除浏览器的历史记录。它具有puppeteer中未实现的功能来重置cookie和缓存。您可以使用CDPSession直接使用Chrome DevTools协议中的功能。

示例

const client = await page.target().createCDPSession();
await client.send('Network.clearBrowserCookies');
await client.send('Network.clearBrowserCache');

这将指示浏览器通过直接调用Network.clearBrowserCookiesNetwork.clearBrowserCache来清除cookie和缓存。


选项3:重新启动浏览器

如果两种方法都不可行,则可以通过关闭旧实例并创建一个新实例来始终重新启动浏览器。这将清除所有存储的数据。