Кукловод - Элемент не появляется на экране - PullRequest
0 голосов
/ 03 октября 2019

Когда я запускаю Puppeteer в NodeJS, чтобы сделать фотографию страницы Google Авиабилеты, один элемент не появляется (когда браузер запускается с Puppeteer), но когда я использую тот же URL / ссылку и открываю его как обычно с любым другимбраузер (без Puppeteer) Я вижу этот элемент.

Я вроде понимаю, что рейсы Google, вероятно, отображают HTML на стороне клиента, а не SSR. Но странно, почему я не вижу только этот элемент.

Это URL, который я использую для проверки: Нажмите

Мой код:

const screenShot = (url) => {

  return new Promise( async (resolve) => {
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    await page.goto(url, { waitUntil: 'load', timeout: 0 });
    await page.screenshot({ path: "screenshot.png" });

    browser.close();
    resolve("Done");

  });
}

Этот элемент не отображается при запуске Chrome / Chromium с Puppeteer:

http://prntscr.com/pe6agz

1 Ответ

0 голосов
/ 03 октября 2019

Проблема: Регион

Сначала необходимо выбрать страну / регион. Вероятно, из-за региональных различий. Убедитесь, что вы используете программу из правильной страны.

Кроме того, выделенный вами элемент (наиболее вероятно) виден, только если вы посещаете ту же страну, что и ваша цель,Это показало, когда я отфильтровал из США и посетил из США IP.

Однако, когда я побывал в другой стране, это показало,

Так что есть некоторые скрытые правила, примененные к полетам Google, к сожалению, вы ничего не можете с этим поделатьпрямо сейчас, пока кто-нибудь не найдет какие-нибудь эксплойты.

Проблема: waitUntil: 'load'

Вы не ожидаете завершения загрузки страницы.

waitUntil: 'load'не будет ждать пока все элементы будут загружены на страницу. Это разрешится при загрузке HTML. Поэтому вам нужно дождаться окончания запросов.

Используйте waitUntil: 'networkidle0' или waitUntil: 'networkidle2', чтобы убедиться, что большинство запросов завершено. Подробнее о на документах .

await page.goto(url, { waitUntil: 'networkidle0', timeout: 0 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...