// ==UserScript== // @name data extraction linkedin // @namespace Violentmonkey Scripts // @match https://www.linkedin.com/* // @grant GM_getValue // @grant GM_setValue // @grant GM_getValues // @grant GM_setValues // @grant GM_listValues // @grant GM_deleteValue // @grant GM_deleteValues // @version 0.1 // @author Siarhei Siniak // @license Unlicense // @description 10/08/2024, 8:44:59 PM // @inject-into document // @require https://cdn.jsdelivr.net/npm/@violentmonkey/dom@1 // @require https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js // @noframes // ==/UserScript== class Linkedin { constructor() { this.data = new Map(); } parse_header() { return [ $( '.scaffold-finite-scroll__content > div > .relative .update-components-header' ).map((i, o) => o.innerText), $( '.scaffold-finite-scroll__content > div > .relative .update-components-actor' ).map((i, o) => o.innerText) ] } data_add (text) { let self = this; if (self.data.has(text)) { return; } self.data.set(text, { value: text, ts: (new Date()).valueOf(), }); console.log(self.data[text]); } document_on_changed () { let self = this; let current_data = self.parse_header(); current_data[0].each((i, o) => { self.data_add(o); }); current_data[1].each((i, o) => { self.data_add(o); }); } listener_add() { let self = this; return VM.observe( document.body, () => { self.document_on_changed(); } ); } } const l = new Linkedin(); const disconnect = l.listener_add();