Skip to content

Instantly share code, notes, and snippets.

@silent-lad
Last active January 16, 2019 10:19
Show Gist options
  • Save silent-lad/374eea183f58be5e37962b4302f8970a to your computer and use it in GitHub Desktop.
Save silent-lad/374eea183f58be5e37962b4302f8970a to your computer and use it in GitHub Desktop.
const puppeteer = require("puppeteer");
const chalk = require("chalk");
var fs = require("fs");
// MY OCD of colorful console.logs for debugging... IT HELPS
const error = chalk.bold.red;
const success = chalk.keyword("green");
(async () => {
try {
// open the headless browser
var browser = await puppeteer.launch({ headless: true });
// open a new page
var page = await browser.newPage();
// enter url in page
await page.goto(`https://news.ycombinator.com/`);
await page.waitForSelector("a.storylink");
var news = await page.evaluate(() => {
var titleNodeList = document.querySelectorAll(`a.storylink`);
var ageList = document.querySelectorAll(`span.age`);
var scoreList = document.querySelectorAll(`span.score`);
var titleLinkArray = [];
for (var i = 0; i < titleNodeList.length; i++) {
titleLinkArray[i] = {
title: titleNodeList[i].innerText.trim(),
link: titleNodeList[i].getAttribute("href"),
age: ageList[i].innerText.trim(),
score: scoreList[i].innerText.trim()
};
}
return titleLinkArray;
});
// console.log(news);
await browser.close();
// Writing the news inside a json file
fs.writeFile("hackernews.json", JSON.stringify(news), function(err) {
if (err) throw err;
console.log("Saved!");
});
console.log(success("Browser Closed"));
} catch (err) {
// Catch and display errors
console.log(error(err));
await browser.close();
console.log(error("Browser Closed"));
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment