Я создаю веб-приложение, которое прослушивает входящие электронные письма с помощью Microsoft Graph, устанавливает некоторые флажки и затем отправляет форму.Процесс выглядит следующим образом:
- Перейти к https://scheduler.engr.wisc.edu,. Это перенаправляет меня на страницу SSO моего университета.
- После входа программа перенаправляется на 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.Была бы признательна за помощь.