【问题标题】:How to Clear History (Clear browsing data) In Node.js Puppeteer Headless=false Chromium browser如何在 Node.js Puppeteer Headless=false Chromium 浏览器中清除历史记录(清除浏览数据)
【发布时间】:2019-08-06 02:21:15
【问题描述】:

我正在尝试通过以下代码使用 node.js puppeteer 删除 headless=false 浏览器中的历史记录,但方法无效。

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() 功能,但它们都不起作用。如果有人知道如何用 puppeteer 清除历史记录,请回答我。

【问题讨论】:

  • 看起来你可以进入那个页面,但你需要进入 shadow dom 才能看到按钮

标签: node.js google-chrome chromium puppeteer


【解决方案1】:

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

您有三个选择:

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

选项 1:使用隐身窗口

要清除历史记录(包括 cookie 和任何数据),您可以在 puppeteer 中使用名为 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来清除cookies和缓存。


选项 3:重启浏览器

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

【讨论】:

  • 感谢您的回复和解决方案。但隐身浏览器不支持 chrome 扩展。
  • @ZilviaSmith 可以选择重启浏览器吗?
  • 是的。重启是一种选择,但有时我们需要清除历史记录,这对于 puppeteer 和 chromium 来说很重要。
  • @ZilviaSmith 我添加了第二个选项,显示如何清除浏览器缓存和 cookie :)
  • 不适用于清除历史记录。 page.deleteCookie();和 page.setCacheEnabled(false);是最好的选择,然后使用开发工具。
猜你喜欢
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
  • 2012-08-25
  • 2021-12-13
  • 2013-12-01
相关资源
最近更新 更多