Puppeteer 在访问 URL 时加载带有 429 的空白页

Puppeteer loads blank page with 429 when accessing URL

我正在从事一个从酒店网站获取价格信息的项目,但在 puppeteer 中加载网站时无法执行任何搜索。

这是我的 JavaScript 打开 Chrome 的片段。

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({ headless: false, devTools: false });
  const page = await browser.newPage();
  await page.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3683.103 Safari/537.36');

  await page.goto('https://www.hyatt.com/');

})();

他们如何检测到我正在使用由 Puppeteer 控制的 Chrome,即使它是 运行 一个有头脑的浏览器?

谢谢

尝试添加以下 header 这是预期的

'accept-language' : 'en-US,en;q=0.9'

适用于我的其他语言。

从这个answer看来你需要这样的东西:

await page.setExtraHTTPHeaders({
    'Accept-Language': 'en-US,en;q=0.9'
});

他们正在为您采集指纹。它是一些 javascript 枚举诸如浏览器插件和导航器对象之类的东西并将其发送回服务器。

所以你必须拦截 post 并将其更改为普通浏览器会发送的内容。

该页面正在使用 Fingerprintjs2 分析您的浏览器,然后才能让您访问该页面。

根据您的第一个请求,该页面会将您发送到使用 Fingerprint2 的特殊检测页面。来自 github 资料库的引述:

Modern & flexible browser fingerprinting library

该代码将检查各种浏览器信息,如特定属性、时区、设备的像素比率等。您可以在 github 上的 this file 中找到实际源代码。

您必须更改各种浏览器属性才能使指纹识别库真正认为您是 "normal user"。