Advertisement
captaindavepdx

Untitled

Aug 24th, 2019
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const puppeteer = require("puppeteer-core");
  2. const process = require("process");
  3.  
  4. const cookie = "";
  5.  
  6. const options = {
  7.     executablePath: "/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome",
  8.     defaultViewport: { width: 1280, height: 800 },
  9.     deviceScaleFactor: 1,
  10.     isLandscape: true,
  11.     headless: false,
  12.     devtools: true
  13. }
  14.  
  15. var browser;
  16. var page;
  17. var steps = [];
  18. var response = [];
  19. var index = 0;
  20.  
  21. var profile = "";
  22. var linkedin = {};
  23.  
  24. steps = [
  25.  
  26.     // Open LinkedIn profile
  27.     async function loadLinkedInProfile() {
  28.         browser = await puppeteer.launch(options);
  29.         page = await browser.newPage();
  30.         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";
  31.         await page.setUserAgent(userAgent);
  32.         await page.setCookie({
  33.             "name": "li_at",
  34.             "value": cookie,
  35.             "domain": ".www.linkedin.com"
  36.         });
  37.         await page.goto(profile);
  38.         await page.on('console', async function(message) { console.log('PAGE LOG:', message.text()) });
  39.         return;
  40.     },
  41.  
  42.     // Scroll to the bottom
  43.     async function autoScroll() {
  44.         await page.evaluate(async function() {
  45.             await new Promise(async function(resolve, reject) {
  46.                 var totalHeight = 0;
  47.                 var distance = 500;
  48.                 var timer = setInterval(async function() {
  49.                     var scrollHeight = document.body.scrollHeight;
  50.                     window.scrollBy(0, distance);
  51.                     totalHeight += distance;
  52.                     if (totalHeight >= scrollHeight) {
  53.                         clearInterval(timer);
  54.                         resolve();
  55.                         return;
  56.                     }
  57.                 }, 100);
  58.             });
  59.         });
  60.     },
  61.  
  62.     // Click "See More" button in experience section
  63.     async function seeMoreButton() {
  64.         await page.evaluate(async function() {
  65.             await new Promise(async function(resolve, reject) {
  66.                 var timer = setInterval(async function() {
  67.                     var section = document.querySelector(".pv-experience-section__see-more");
  68.                     if (!section) {
  69.                         resolve();
  70.                         return;
  71.                     }
  72.                     var button = section.querySelector(".pv-profile-section__see-more-inline");
  73.                     if (button) {
  74.                         button.click();
  75.                         button.blur();
  76.                     } else {
  77.                         clearInterval(timer);
  78.                         resolve();
  79.                         return;
  80.                     }
  81.             }, 1000);
  82.             });
  83.         });
  84.     },
  85.  
  86.     // Click "Show More" button in skills & endorsements section
  87.     async function showMoreButton() {
  88.         await page.evaluate(async function() {
  89.             await new Promise(async function(resolve, reject) {
  90.                 var button = document.querySelector(".pv-skills-section__additional-skills");
  91.                 if (button) {
  92.                     button.click();
  93.                     button.blur();
  94.                 }
  95.                 resolve();
  96.                 return;
  97.             });
  98.         });
  99.     },
  100.  
  101.     // Click "Given" tab in recommendations section
  102.     async function givenTab() {
  103.         await page.evaluate(async function() {
  104.             await new Promise(async function(resolve, reject) {
  105.                 var tabs = document.querySelectorAll("artdeco-tab[role=\"tab\"]");
  106.                 for (const tab of tabs) {
  107.                     var title = tab.textContent;
  108.                     if (title.toLowerCase().includes("given")) {
  109.                         tab.click();
  110.                     }
  111.                 }
  112.                 resolve();
  113.                 return;
  114.             });
  115.         });
  116.     },
  117.  
  118.     // Click "See More" button in all sections
  119.     async function seeMoreButtons() {
  120.         await page.evaluate(async function() {
  121.             await new Promise(async function(resolve, reject) {
  122.                 var buttons = document.querySelectorAll(".lt-line-clamp__more");
  123.                 for (const button of buttons) {
  124.                     button.click();
  125.                     button.blur();
  126.                 }
  127.                 resolve();
  128.                 return;
  129.             });
  130.         });
  131.         page.screenshot({ path: "example.png", type: "png", fullPage: true });
  132.     }
  133. ]
  134.  
  135. // Implement all functions in steps array
  136. async function executeStepsOneByOne() {
  137.     if (typeof steps[index] == "function") {
  138.         await steps[index]();
  139.         index += 1;
  140.         await executeStepsOneByOne();
  141.     }
  142. }
  143.  
  144. if (process.argv == 1) {
  145.     console.log("Format: node scrape.js URL");
  146.     console.log("Error: You must provide a LinkedIn profile URL.");
  147. } else {
  148.     profile = process.argv[process.argv.length - 1];
  149.     executeStepsOneByOne();
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement