-
-
Save pasiaj/6125565 to your computer and use it in GitHub Desktop.
| var auth = { | |
| user: "USERNAME", | |
| pass: "PASSWORD" | |
| }; | |
| function ParallelRunner (list, func, runners) { | |
| function createSlots(runners) { | |
| var slots = []; | |
| for (var i = 0; i < runners; i++) { | |
| slots.push( objReturner() ); | |
| } | |
| return slots; | |
| } | |
| function objReturner() { | |
| return { free: true }; | |
| } | |
| function toArray(obj) { | |
| return Array.prototype.slice.call(obj); | |
| } | |
| function bind(scope, fn /*, variadic args to curry */ ) { | |
| var args = Array.prototype.slice.call(arguments, 2); | |
| return function() { | |
| return fn.apply(scope, args.concat(toArray(arguments))); | |
| }; | |
| } | |
| function _next() { | |
| var slot = this.getFreeSlot(); | |
| if (slot !== null) { | |
| slot.free = false; | |
| var cb = function() { | |
| slot.free = true; | |
| }; | |
| if (list.length !== 0) { | |
| var next = list.pop(); | |
| func(next, cb); | |
| } else {} | |
| } | |
| } | |
| this.start = function() { | |
| interval = setInterval(this.next, 100); | |
| }; | |
| this.stop = function(){ | |
| clearInterval(interval); | |
| }; | |
| function _getFreeSlot() { | |
| for (var i = slots.length - 1; i >= 0; i--) { | |
| if (slots[i].free) { | |
| return slots[i]; | |
| } | |
| } | |
| return null; | |
| } | |
| runners = runners || 3; | |
| var slots = createSlots(runners), | |
| interval; | |
| // Something weird happens with objects returned by PhantomJS page.evaluate() | |
| // Fix em by rebuilding the objects. ONLY WORKS w/ SIMPLE OBJECTS!!! | |
| list = JSON.parse(JSON.stringify(list)); | |
| this.next = bind(this, _next); | |
| this.getFreeSlot = bind(this, _getFreeSlot); | |
| } | |
| function visitAndEndorse(name, cb) { | |
| var np = require("webpage").create(); | |
| np.onConsoleMessage = function(msg) { | |
| console.log(msg); | |
| }; | |
| np.open(name.href, function(status) { | |
| if (status === "success") { | |
| np.evaluate(function() { | |
| function click(el) { | |
| var ev = document.createEvent("MouseEvent"); | |
| ev.initMouseEvent( | |
| "click", | |
| true /* bubble */ , true /* cancelable */ , | |
| window, null, | |
| 0, 0, 0, 0, /* coordinates */ | |
| false, false, false, false, /* modifier keys */ | |
| 0 /*left*/ , null | |
| ); | |
| el.dispatchEvent(ev); | |
| } | |
| var name = document.querySelector(".full-name"); | |
| if (name !== null) { | |
| console.log("Visited " + name.textContent); | |
| } | |
| setTimeout(function() { | |
| var endorse = document.querySelector(".btn-action.endorse-skills"); | |
| if (endorse !== null) { | |
| console.log("Endorsed " + name.textContent); | |
| click(endorse); | |
| } else { | |
| console.log("No endorse"); | |
| } | |
| }, 3000); | |
| }); | |
| window.setTimeout(function() { | |
| np.close(); | |
| cb(); | |
| }, 6000); | |
| } | |
| }); | |
| } | |
| var page = require("webpage").create(); | |
| var names = []; | |
| page.onConsoleMessage = function(msg) { | |
| console.log(msg); | |
| }; | |
| page.open("http://www.linkedin.com/people/connections", function(status) { | |
| if (status === "success") { | |
| page.evaluate(function() { | |
| function click(el) { | |
| var ev = document.createEvent("MouseEvent"); | |
| ev.initMouseEvent( | |
| "click", | |
| true /* bubble */ , true /* cancelable */ , | |
| window, null, | |
| 0, 0, 0, 0, /* coordinates */ | |
| false, false, false, false, /* modifier keys */ | |
| 0 /*left*/ , null | |
| ); | |
| el.dispatchEvent(ev); | |
| } | |
| var button = document.querySelector("#register-custom-nav a"); | |
| click(button); | |
| }); | |
| window.setTimeout(function() { | |
| page.evaluate(function(auth) { | |
| document.querySelector("#session_key-login").value = auth.user; | |
| document.querySelector("#session_password-login").value = auth.pass; | |
| document.querySelector("#login").submit(); | |
| console.log("Login submitted!"); | |
| }, auth); | |
| }, 1400); | |
| window.setTimeout(function() { | |
| console.log("Get names"); | |
| names = page.evaluate(function() { | |
| var all = document.querySelectorAll(".conx-list li"); | |
| var list = []; | |
| for (var i = all.length - 1; i >= 0; i--) { | |
| var item = all[i]; | |
| if (item.hasOwnProperty("id")) { | |
| var nameInputs = item.getElementsByTagName("input"); | |
| if (nameInputs.length > 0) { | |
| console.log(nameInputs[0].value, item.id); | |
| list.push({ | |
| name: nameInputs[0].value, | |
| href: "http://www.linkedin.com/profile/view?id=" + item.id | |
| }); | |
| } | |
| } | |
| } | |
| console.log("Got " + list.length + " names"); | |
| return list; | |
| }); | |
| var a = new ParallelRunner(names, visitAndEndorse, 3); | |
| a.start(); | |
| }, 6000); | |
| } | |
| }); | |
I'm sorry, I missed your comment earlier. Thereseems to be a problem with the code: No contacts are found. I haven't had the time to look into it, yet.
can you update the code please, not working :(
I ran many times but getting this.
./phantomjs linkedin.js
Login submitted!
Get names
Got 0 names
and after that it hangs.
I am using phantomjs version => phantomjs-2.1.1-linux-i686
any update?
hello friends , any updte on above scripts??
can you help m,e on following isuues,
i return phantomjs script to scrap my connections information , but when i am passing the address as follows:
phantomjs printli.js https://www.linkedin.com/mynetwork/invite-connect/connections/
- : phantomjs
- printli,js
- url :" https://www.linkedin.com/mynetwork/invite-connect/connections/"
internally this will redirect to linkden login page :-(
if any help please help ,e... thanks
this script doesn't seem to be working anymore...when i run it it says i have no contacts and just hangs.
i could attempt to fix it but i would just like to verify it im not doing something wrong...of course i entered my login info where indicated.