📜  puppeteer 阻止请求 javascript (1)

📅  最后修改于: 2023-12-03 15:03:53.429000             🧑  作者: Mango

使用 Puppeteer 阻止 JavaScript 请求

在使用 Puppeteer 进行 web 自动化的过程中,有时我们需要阻止 web 页面中的某些 JavaScript 请求,这可以通过 Puppeteer 提供的一些 API 来实现。

page.setRequestInterception(value)

Puppeteer 中的 page 对象提供了一个 setRequestInterception 方法,该方法用于设置页面请求拦截。我们可以通过这个方法来拦截页面中的所有请求,然后进行处理。

// 开启请求拦截
await page.setRequestInterception(true);

// 拦截请求
page.on('request', (request) => {
  if (request.url().endsWith('.js')) {
    request.abort(); // 阻止 JavaScript 请求
  } else {
    request.continue(); // 其他请求继续
  }
});

// 关闭请求拦截
await page.setRequestInterception(false);

在上面的例子中,我们首先开启了请求拦截,然后监听 request 事件,并根据请求的类型来决定是否拦截。如果是 JavaScript 请求,我们就调用 request.abort() 来阻止该请求。最后,我们需要手动关闭请求拦截。

page.evaluateOnNewDocument(pageFunction)

如果我们需要在每次页面加载时都阻止 JavaScript 请求,我们可以使用 page.evaluateOnNewDocument 方法,该方法会在每次页面创建时注入一段 JavaScript 代码。

await page.evaluateOnNewDocument(() => {
  Object.defineProperty(navigator, 'languages', {
    get: () => ['en-US', 'en'],
  });

  Object.defineProperty(navigator, 'plugins', {
    get: () => [{}, {}, {}],
  });
});

在上面的例子中,我们使用 Object.defineProperty 方法来修改 navigator.languagesnavigator.plugins,以欺骗网站认为我们的浏览器不支持某些功能,从而阻止一些 JavaScript 请求。

总的来说,通过上述方法,我们可以在 Puppeteer 中轻松地阻止 web 页面中的 JavaScript 请求。