Skip to content

Instantly share code, notes, and snippets.

@lexoyo
Last active March 8, 2019 21:31
Show Gist options
  • Save lexoyo/52ccf88d6bdedc02d7004e4939e3701c to your computer and use it in GitHub Desktop.
Save lexoyo/52ccf88d6bdedc02d7004e4939e3701c to your computer and use it in GitHub Desktop.
Extract all emails from a linkedin search. Opens each profile and look for an email.
// ==UserScript==
// @name Linkedin-get-emails
// @version 1.3
// @grant none
// @match https://www.linkedin.com/*
// ==/UserScript==
(function() {
'use strict';
start()
// window.onhashchange = start;
// window.onpopstate = start;
})();
function stop() {
var emails = JSON.parse(localStorage.getItem('linkedin-emails') || '[]');
alert('Linkedin get emails stopped, ' + emails.length + ' emails found. All the emails: ', JSON.stringify(emails));
console.info('stop,', emails.length, 'emails found:', emails);
localStorage.removeItem('linkedin-connexions')
localStorage.removeItem('linkedin-emails')
localStorage.removeItem('linkedin-started')
}
function addStartBtn(phase) {
$('#lexo-stop, #lexo-start').remove()
$('.search-results__total').append(`<strong id="lexo-start">start</strong>`).click(() => {
console.log('start')
localStorage.setItem('linkedin-started', phase)
storeLinks();
});
}
function addStopBtn() {
$('#lexo-stop, #lexo-start').remove()
$(`<strong style="position: fixed;" id="lexo-stop">Stop</strong>`).insertBefore('.ad-banner:first').click(() => {
console.log('stop')
stop()
});
}
function start() {
setTimeout(function() {
var phase = localStorage.getItem('linkedin-started');
if(phase === 'phase1') {
storeLinks();
addStopBtn()
}
else if(phase === 'phase2') {
startPhase2()
}
else {
addStartBtn('phase1')
}
}, 5000);
}
function startPhase2() {
console.log('start phase 2');
addStopBtn();
var stored = JSON.parse(localStorage.getItem('linkedin-connexions') || '[]')
//console.log('connexions:', stored);
var href = stored.pop();
if(href) {
localStorage.setItem('linkedin-connexions', JSON.stringify(stored))
if(localStorage.getItem('linkedin-started') === 'phase2') {
$('.pv-top-card-v2-section__link--contact-info')
.trigger('click')
var emails = JSON.parse(localStorage.getItem('linkedin-emails') || '[]');
console.info(emails.length, 'emails found so far,', stored.length, 'left to go');
setTimeout(() => {
var emailEl = $('.pv-contact-info__contact-link').filter((idx, el) => el.innerHTML.indexOf('@') > 0).get();
var nameEl = $('.pv-top-card-section__name').get(0).innerText;
if(emailEl && nameEl) {
var email = emailEl.map(el => el.innerText);
emails.push({
email: email,
name: nameEl,
});
localStorage.setItem('linkedin-emails', JSON.stringify(emails))
console.log('saved email', email, 'and name', nameEl)
}
else {
console.log('no email')
}
location.href = href;
}, 2000)
}
else {
localStorage.setItem('linkedin-started', 'phase2')
location.href = href;
}
}
else {
stop();
}
}
function storeLinks() {
var n = $(document).height() - $(window).height();
$('html, body')
.animate({ scrollTop: n }, 5000, () => { setTimeout(function() {
var links = $('a.search-result__result-link')
.map((idx, el) => el.href)
.get()
var stored = JSON.parse(localStorage.getItem('linkedin-connexions') || '[]')
.concat(links)
var newStored = stored.filter((link, idx) => idx === stored.indexOf(link))
localStorage.setItem('linkedin-connexions', JSON.stringify(newStored))
console.log(newStored.length, 'urls')
const btn = $('.artdeco-pagination__button.artdeco-pagination__button--next.artdeco-button--icon-right')
if(btn.length > 0 && !btn.attr('disabled')) {
btn.trigger('click')
start();
}
else {
startPhase2()
}
}, 4000)})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment