Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const puppeteer = require("puppeteer-core");
- const process = require("process");
- const cookie = "";
- const options = {
- executablePath: "/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome",
- defaultViewport: { width: 1280, height: 800 },
- deviceScaleFactor: 1,
- isLandscape: true,
- headless: false,
- devtools: true
- }
- var browser;
- var page;
- var steps = [];
- var response = [];
- var index = 0;
- var profile = "";
- var linkedin = {};
- steps = [
- // Open LinkedIn profile
- async function loadLinkedInProfile() {
- browser = await puppeteer.launch(options);
- page = await browser.newPage();
- const userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.35 Safari/537.36";
- await page.setUserAgent(userAgent);
- await page.setCookie({
- "name": "li_at",
- "value": cookie,
- "domain": ".www.linkedin.com"
- });
- await page.goto(profile);
- await page.on('console', async function(message) { console.log('PAGE LOG:', message.text()) });
- return;
- },
- // Scroll to the bottom
- async function autoScroll() {
- await page.evaluate(async function() {
- await new Promise(async function(resolve, reject) {
- var totalHeight = 0;
- var distance = 500;
- var timer = setInterval(async function() {
- var scrollHeight = document.body.scrollHeight;
- window.scrollBy(0, distance);
- totalHeight += distance;
- if (totalHeight >= scrollHeight) {
- clearInterval(timer);
- resolve();
- return;
- }
- }, 100);
- });
- });
- },
- // Click "See More" button in experience section
- async function seeMoreButton() {
- await page.evaluate(async function() {
- await new Promise(async function(resolve, reject) {
- var timer = setInterval(async function() {
- var section = document.querySelector(".pv-experience-section__see-more");
- if (!section) {
- resolve();
- return;
- }
- var button = section.querySelector(".pv-profile-section__see-more-inline");
- if (button) {
- button.click();
- button.blur();
- } else {
- clearInterval(timer);
- resolve();
- return;
- }
- }, 1000);
- });
- });
- },
- // Click "Show More" button in skills & endorsements section
- async function showMoreButton() {
- await page.evaluate(async function() {
- await new Promise(async function(resolve, reject) {
- var button = document.querySelector(".pv-skills-section__additional-skills");
- if (button) {
- button.click();
- button.blur();
- }
- resolve();
- return;
- });
- });
- },
- // Click "Given" tab in recommendations section
- async function givenTab() {
- await page.evaluate(async function() {
- await new Promise(async function(resolve, reject) {
- var tabs = document.querySelectorAll("artdeco-tab[role=\"tab\"]");
- for (const tab of tabs) {
- var title = tab.textContent;
- if (title.toLowerCase().includes("given")) {
- tab.click();
- }
- }
- resolve();
- return;
- });
- });
- },
- // Click "See More" button in all sections
- async function seeMoreButtons() {
- await page.evaluate(async function() {
- await new Promise(async function(resolve, reject) {
- var buttons = document.querySelectorAll(".lt-line-clamp__more");
- for (const button of buttons) {
- button.click();
- button.blur();
- }
- resolve();
- return;
- });
- });
- page.screenshot({ path: "example.png", type: "png", fullPage: true });
- }
- ]
- // Implement all functions in steps array
- async function executeStepsOneByOne() {
- if (typeof steps[index] == "function") {
- await steps[index]();
- index += 1;
- await executeStepsOneByOne();
- }
- }
- if (process.argv == 1) {
- console.log("Format: node scrape.js URL");
- console.log("Error: You must provide a LinkedIn profile URL.");
- } else {
- profile = process.argv[process.argv.length - 1];
- executeStepsOneByOne();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement