Created
March 2, 2022 18:19
-
-
Save shrshk/3cdf3684d79ed82e5fe1d27b9258e435 to your computer and use it in GitHub Desktop.
Ticket availability alerter, puppeteer and aws lambda
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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