Тайм-аут WaitForSelector на Heroku - PullRequest
0 голосов
/ 12 мая 2019

Я создаю веб-приложение, которое прослушивает входящие электронные письма с помощью Microsoft Graph, устанавливает некоторые флажки и затем отправляет форму.Процесс выглядит следующим образом:

  1. Перейти к https://scheduler.engr.wisc.edu,. Это перенаправляет меня на страницу SSO моего университета.
  2. После входа программа перенаправляется на https://scheduler.engr.wisc.edu, где я делаю отправку формы.

Вот код:

exports.itsTimeToVulture = async (droppedShifts) => {
  const browser = await puppeteer.launch({
    args: ['--no-sandbox', '--disable-setuid-sandbox']
  });
  const page = await browser.newPage();
  await page.goto('https://scheduler.engr.wisc.edu/worklocation/detail/1-' +  moment(droppedShifts[0].date).format('YYYY-MM-DD'));

  await page.type('#j_username', process.env.USER);
  await page.type('#j_password', process.env.PASS);
  await page.click('button[type=submit]');

  await page.waitForSelector('.footer').then(() => {
    return page.$$eval('.timeslot', (timeslots, week) => {
      week.forEach((day, index) => {
        if (day) {
          day.forEach(shift => {
            timeslots[index].children.item(shift).querySelector('input[name*=schedadd]').setAttribute('checked', true);
          });
        }
      });
    }, getIndices(droppedShifts));
  });

  await page.click('input[type=submit]');
  await browser.close()
};

Сначала я попытался использовать page.waitForNavigation(), но это дало ошибку.Я решил использовать page.waitForSelector(), и он отлично работает на локальном сервере.

Проблема, с которой я столкнулся при использовании Heroku.Я установил puppeteer-heroku-buildpack, а также node.js buildpack.Однако время ожидания по какой-то причине waitForSelector().Вот ошибка из моих журналов:

{ TimeoutError: waiting for selector ".footer" failed: timeout 30000ms exceeded
info app web.1 at new WaitTask (/app/node_modules/puppeteer/lib/DOMWorld.js:561:28)
info app web.1 at DOMWorld._waitForSelectorOrXPath (/app/node_modules/puppeteer/lib/DOMWorld.js:490:22)
info app web.1 at DOMWorld.waitForSelector (/app/node_modules/puppeteer/lib/DOMWorld.js:444:17)
info app web.1 at Frame.waitForSelector (/app/node_modules/puppeteer/lib/FrameManager.js:628:47)
info app web.1 at Frame.<anonymous> (/app/node_modules/puppeteer/lib/helper.js:111:23)
info app web.1 at Page.waitForSelector (/app/node_modules/puppeteer/lib/Page.js:1046:29)
info app web.1 at exports.itsTimeToVulture (/app/helpers/scraper.js:17:14)
info app web.1 at process._tickCallback (internal/process/next_tick.js:68:7) name: 'TimeoutError' }

Что меня действительно смущает, так это то, что эта установка отлично работает на localhost, но не работает на heroku.Была бы признательна за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...