Puppeteer загружает пустую страницу с 429 при доступе к URL - PullRequest
3 голосов
/ 07 июня 2019

Я работаю над проектом по сбору информации о ценах на веб-сайте отеля, но не могу выполнить поиск при загрузке веб-сайта в кукловод.

Вот фрагмент моего 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/');

})();

Как они обнаруживают, что я использую Chrome, управляемый Puppeteer, даже если он работает с браузерным заголовком?

Спасибо

Ответы [ 3 ]

0 голосов
/ 08 июня 2019

Они снимают у тебя отпечатки пальцев.Это некоторый javascript, который перечисляет такие вещи, как плагины вашего браузера и объект навигатора, и отправляет их обратно на сервер.

Таким образом, вам придется перехватить этот пост и изменить его на то, что отправит обычный браузер.

0 голосов
/ 08 июня 2019

Страница использует Fingerprintjs2 для анализа вашего браузера, прежде чем разрешить вам доступ к странице.

По вашему первому запросу страница отправляет вас на специальную страницу обнаружения, которая использует Fingerprint2 .Цитата из репозитория github:

Современная и гибкая библиотека отпечатков пальцев браузера

Код будет проверять все виды информации браузера, такие как конкретные атрибуты, часовой пояс, pixelRatio вашего устройстваи т. д. Фактический исходный код можно найти в этом файле на github.

Вам придется изменить все виды атрибутов браузера, чтобы библиотека для дактилоскопии действительно воспринимала вас как "нормального"пользователь».

0 голосов
/ 08 июня 2019

Попробуйте добавить следующий заголовок, который ожидается

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

работает для меня на других языках.

Из этого ответа похоже, что вам нужно что-то вроде:

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