Skip to content

Instantly share code, notes, and snippets.

@peterc
Last active October 27, 2020 22:20
Show Gist options
  • Save peterc/3c8cd11b6012e11b26fe5330509f52aa to your computer and use it in GitHub Desktop.
Save peterc/3c8cd11b6012e11b26fe5330509f52aa to your computer and use it in GitHub Desktop.
Check something on a remote site using AWS Lambda, Puppeteer, and SNS
// See https://github.com/shelfio/chrome-aws-lambda-layer for more info
// on the layer needed to make chrome-aws-lambda work
const AWS = require('aws-sdk');
const chromium = require('chrome-aws-lambda');
exports.handler = async (event, context) => {
let sns = new AWS.SNS();
let browser = await chromium.puppeteer.launch({
args: chromium.args,
defaultViewport: chromium.defaultViewport,
executablePath: await chromium.executablePath,
headless: chromium.headless,
ignoreHTTPSErrors: true,
});
let page = await browser.newPage();
await page.goto(process.env.REMOTE_URL);
let top_of_range = await page.evaluate(() => {
let range = document.getElementById('pr_ps').innerText;
return range.match(/[\d\,]+/g)[1].replace(/,/g, '');
});
await browser.close();
let message = `Top of range is now ${top_of_range}`;
const promise = new Promise((resolve, reject) => {
if (Number(top_of_range) == 150000) {
resolve();
}
sns.publish({
Message: message,
TopicArn: process.env.SNS_ARN
}, function(err, data) {
if (err) {
console.log(err.stack);
reject();
}
resolve();
});
});
return promise;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment