Skip to content

Instantly share code, notes, and snippets.

@shrshk
Created March 2, 2022 18:19
Show Gist options
  • Save shrshk/3cdf3684d79ed82e5fe1d27b9258e435 to your computer and use it in GitHub Desktop.
Save shrshk/3cdf3684d79ed82e5fe1d27b9258e435 to your computer and use it in GitHub Desktop.
Ticket availability alerter, puppeteer and aws lambda
const runPuppeteer = async () => {
let puppeteerRun = null;
let browser = null;
try {
browser = await chromium.puppeteer.launch({
args: chromium.args,
defaultViewport: chromium.defaultViewport,
executablePath: await chromium.executablePath,
headless: chromium.headless,
ignoreHTTPSErrors: true,
});
const page = await browser.newPage();
await page.goto('https://www.recreation.gov/ticket/253731/ticket/255');
const datePicker = await page.$('.DateInput');
await datePicker.focus();
await datePicker.click();
await page.waitForSelector('.DayPicker');
const calendarMonthGrid = await page.$('.CalendarMonth');
await calendarMonthGrid.focus();
await page.waitForSelector('.DayPickerNavigation_button');
await page.waitForSelector('.CalendarMonth');
let month = '';
let monthIdx = '';
const monthArray = await page.$$('.CalendarMonth');
for (let i=0; i<monthArray.length; i++) {
month = await monthArray[i].evaluate(el => el.textContent);
if (month.includes(MONTH_I_CARE)) {
monthIdx = i;
}
}
// TO DO
// if monthIdx is empty click the calendarNavigator
// let calendarNavigator = await page.$('.DayPickerNavigation_button');
const tables = await page.$$('.CalendarMonth_table');
const tds = await tables[monthIdx].$$('td');
for (let i=0; i<tds.length; i++) {
const data = await ( tds[i].$('div'));
if (data == null) {
continue;
}
const dateAvailability = await data.evaluate(el => el.textContent);
const dateAvailabilitySplit = dateAvailability.match(/[a-zA-Z]+|[0-9]+/g);
const resDays = getAvailableDaysICare(dateAvailabilitySplit[0].toString(), dateAvailabilitySplit[1].toString());
if (resDays.length > 0) {
const messageBody = `Hey! Haleakala National Park Summit Sunrise Reservations are now available for
${MONTH_I_CARE} ${resDays.toString()}`
await sendMessage(messageBody);
}
}
puppeteerRun = 'successfully ran puppeteer and alerter';
} catch (e) {
throw new Error(e);
} finally {
if (browser !== null) {
await browser.close();
}
}
return puppeteerRun;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment