Кукловод не может найти селектор на heroku, но работает локально

#javascript #heroku #web-scraping #puppeteer

#javascript #heroku #очистка веб-страниц #кукловод

Вопрос:

Я пытаюсь повторить текущий номер страницы из страницы внизу этой страницы.

Мой код работает на моем локальном компьютере, но при переходе на Heroku я получаю следующую ошибку:

(узел: 23) Предупреждение о необработанном promiserejectionwarning: Ошибка: Ошибка: не удалось найти элемент, соответствующий селектору «#ListViewPagination_Bottom> div> div > span> span.selection> span»

Вот мой код:

 const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(
    "https://www.realtor.ca/map#ZoomLevel=14amp;Center=43.744046,-79.406789amp;LatitudeMax=43.76832amp;LongitudeMax=-79.36641amp;LatitudeMin=43.71977amp;LongitudeMin=-79.44717amp;view=listamp;Sort=6-Damp;PropertyTypeGroupID=1amp;PropertySearchTypeId=1amp;TransactionTypeId=2amp;PriceMax=1500000amp;BuildingTypeId=1amp;Currency=CAD"
  );
  let currentPageNumber = await page.$eval(
    "#ListViewPagination_Bottom > div > div > span > span.selection > span",
    (element) => element.innerText
  );
  console.log(currentPageNumber);
  await browser.close();
})();

 

Комментарии:

1. попробуйте получить на производстве только то #ListViewPagination_Bottom , что записано в консоли, и посмотрите, получите ли вы что-нибудь.

2. Он возвращает значение null при производстве. В моей локальной версии он возвращает правильные данные. Есть какие-нибудь идеи, что происходит?

3. Я бы предположил, что это связано с headless: true / false. Попробуйте: await puppeteer.launch({headless: false}); , это может сработать.

4. Не повезло. Это просто приводит к сбою всей программы на Heroku.

5. вы когда-нибудь в этом разбирались?