linkedin connections | connect on linkedin | Cell 6 | Search

This code automates the process of connecting with LinkedIn contacts using Selenium to control a web browser. It takes a list of connections or a single connection as input and attempts to connect with a random subset of them.

Run example

npm run import -- "connect add friends linkedin"

connect add friends linkedin

var importer = require('../Core');
var glob = require('glob');
var path = require('path');
var fs = require('fs');
var runSeleniumCell = importer.import("run selenium cell");

var PROFILE_PATH = process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
var project = PROFILE_PATH + '/Conversations';


var listAllConnections, connectLinkedin, loginLinkedIn;
function addLinkedinConnections(conn, list) {
    var pages;
    return runSeleniumCell(['log in linkedin', 'connect on linkedin'])
        .then(r => {
            listAllConnections = r[1].listAllConnections;
            connectLinkedin = r[1].connectLinkedin;
            loginLinkedIn = r.loginLinkedIn;
            return loginLinkedIn();
        })
        .then(() => typeof conn === 'string' ? [conn] : (typeof conn !== 'undefined' ? conn : listAllConnections(list)))
        .then(pages => {
            const rand = Math.round(pages.length / 30 * Math.random()) * 30;
            console.log(pages.slice(rand, rand + 30));
            return importer.runAllPromises(pages.slice(rand, rand + 30).map(page => resolve => {
                return connectLinkedin(page, true)
                    .then(() => resolve(page))
                    .catch(e => resolve(e))
            }));
        })
        .then(r => {
            console.log(r);
            return r;
        })
}
module.exports = addLinkedinConnections;

What the code could have been:

// Import required modules
const { resolve, reject } = require('bluebird');
const glob = require('glob');
const path = require('path');
const fs = require('fs');
const { runSeleniumCell } = require('../Core');

// Define constants
const PROFILE_PATH = process.env.HOME
 ? process.env.HOME
  : (process.env.HOMEPATH? process.env.HOMEPATH : process.env.USERPROFILE);
const PROJECT_PATH = path.join(PROFILE_PATH, 'Conversations');

// Define functions
function addLinkedinConnections(conn, list) {
  return runSeleniumCell(['log in linkedin', 'connect on linkedin'])
   .then(result => {
      const { listAllConnections, connectLinkedin, loginLinkedIn } = result[1];
      return loginLinkedIn();
    })
   .then(() => {
      const connections = typeof conn ==='string'? [conn] : conn || listAllConnections();
      return connections;
    })
   .then((pages) => {
      // TODO: Calculate a more robust random offset
      const offset = Math.round(pages.length / 30 * Math.random()) * 30;
      const linksToConnect = pages.slice(offset, offset + 30);

      // TODO: Add logging for the connected links
      return runAllPromises(linksToConnect.map((page) => () => connectLinkedin(page, true)));
    })
   .then((results) => {
      console.log(results);
      return results;
    })
   .catch((error) => {
      console.error(error);
      throw error;
    });
}

// Helper function to run all promises
function runAllPromises(promises) {
  return Promise.map(promises, (promise) => promise(), { concurrency: 5 });
}

module.exports = addLinkedinConnections;

This code defines a function addLinkedinConnections that automates connecting with LinkedIn contacts.

Here's a breakdown:

  1. Setup:

  2. Function Logic:

  3. Key Points:

Let me know if you'd like a deeper dive into any specific part of the code!