// ==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) => ({ header: o.innerText })), $( '.scaffold-finite-scroll__content > div > .relative .update-components-actor' ).map((i, o) => { let header = $(o); let teaser = $(o).parents('.relative') .parent().find('.feed-shared-update-v2__description-wrapper'); return { header: header.text(), teaser: teaser.text(), }; }) ] } data_add (entry) { let self = this; if (self.data.has(entry.header)) { return; } self.data.set(entry.header, { entry: entry, ts: (new Date()).valueOf(), }); console.log(self.data.get(entry.header)); } 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();