├── .gitignore ├── README.md ├── linkedin.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | credentials.json 3 | debug.log -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # linkedin-request-sender 2 | 3 | To use this script, edit company, maxPages, message in linkedin.js 4 | 5 | create a credentials.json file, put your credentials there : 6 | 7 | ``` 8 | { 9 | "username": "sample@gmail.com", 10 | "password": "12345678" 11 | } 12 | ``` 13 | then execute the following command to install dependencies and run script respectively: 14 | 15 | ``` 16 | npm install 17 | 18 | node linkedin.js 19 | 20 | ``` 21 | -------------------------------------------------------------------------------- /linkedin.js: -------------------------------------------------------------------------------- 1 | require("chromedriver"); 2 | let swd = require("selenium-webdriver"); 3 | let { username, password } = require("./credentials.json"); 4 | const { Driver } = require("selenium-webdriver/chrome"); 5 | let browser = new swd.Builder(); 6 | let tab = browser.forBrowser("chrome").build(); 7 | let tabWillBeOpenedPromise = tab.get( 8 | "https://www.linkedin.com/login?fromSignIn=true&trk=guest_homepage-basic_nav-header-signin" 9 | ); 10 | 11 | let company = "Microsoft"; 12 | let maxPages = 2; 13 | let maxRequests = 50; 14 | let requestCount = 0; 15 | let profilesUrls = []; 16 | let myMessage = ` 17 | Hi Sir, I am Rohit Jain. I'm a final year undergrad at NSUT(East campus). Glad to connect with you. 18 | `; 19 | 20 | tabWillBeOpenedPromise 21 | .then(function () { 22 | let findTimeOut = tab.manage().setTimeouts({ 23 | implicit: 1000000, 24 | }); 25 | return findTimeOut; 26 | }) 27 | .then(async function () { 28 | await login(); 29 | for (let i = 1; i < maxPages; i++) { 30 | await tab.get( 31 | "https://www.linkedin.com/search/results/people/?facetNetwork=%5B%22S%22%2C%22O%22%5D&keywords=" + 32 | company + 33 | "&origin=FACETED_SEARCH&page=" + 34 | i 35 | ); 36 | 37 | await tab.sleep(1000); 38 | await tab; 39 | let people = await tab.findElements( 40 | swd.By.css(".entity-result__title-text") 41 | ); 42 | 43 | let count = 0; 44 | 45 | console.log(people.length); 46 | 47 | for (let index = 0; index < people.length; index++) { 48 | let element = people[index].findElement( 49 | swd.By.css("a") 50 | ); 51 | debugger; 52 | let profileUrl = await (await element).getAttribute("href"); 53 | if (count % 2 == 0) profilesUrls.push(profileUrl); 54 | count++; 55 | } 56 | } 57 | console.log(profilesUrls); 58 | 59 | for (let index = 0; index < profilesUrls.length; index++) { 60 | await sendConnection(profilesUrls[index]); 61 | await tab.sleep(1000); 62 | if (requestCount >= maxRequests) break; 63 | } 64 | 65 | return undefined; 66 | }) 67 | .catch(function (err) { 68 | console.log(err); 69 | }); 70 | 71 | async function login() { 72 | return new Promise(async function (resolve, reject) { 73 | let inputUserBoxPromise = tab.findElement(swd.By.css("#username")); 74 | let inputPassBoxPromise = tab.findElement(swd.By.css("#password")); 75 | let pArr = await Promise.all([inputUserBoxPromise, inputPassBoxPromise]); 76 | 77 | let inputUserBox = pArr[0]; 78 | let inputPassBox = pArr[1]; 79 | let inputUserBoxWillBeFilledP = inputUserBox.sendKeys(username); 80 | let inputPassBoxWillBeFilledP = inputPassBox.sendKeys(password); 81 | 82 | let willBeFilledArr = await Promise.all([ 83 | inputUserBoxWillBeFilledP, 84 | inputPassBoxWillBeFilledP, 85 | ]); 86 | let loginButtonPromise = tab.findElement( 87 | swd.By.css("button[data-litms-control-urn='login-submit']") 88 | ); 89 | 90 | let loginButton = await loginButtonPromise; 91 | let loginButtonClicked = await loginButton.click(); 92 | resolve(); 93 | }); 94 | } 95 | 96 | async function sendConnection(url) { 97 | return new Promise(async function (resolve, reject) { 98 | let getProfilePage = await tab.get(url); 99 | // 100 | let nameli = await tab.findElement( 101 | swd.By.css(".t-24.t-black.t-normal.break-words") 102 | ); 103 | let name = await nameli.getText(); 104 | let getConnectedP = tab.findElement( 105 | swd.By.css( 106 | ".pv-s-profile-actions--connect.artdeco-button.artdeco-button--primary" 107 | ) 108 | ); 109 | 110 | getConnectedP 111 | .then(function (connected) { 112 | console.log("connect select"); 113 | let buttonClickedP = connected.click(); 114 | buttonClickedP.then(async function () { 115 | //Add a note 116 | //name="message" 117 | //Done 118 | let addNoteP = (await tab).findElement( 119 | swd.By.css("button[aria-label='Add a note']") 120 | ); 121 | addNoteP 122 | .then(async (addNote) => { 123 | await addNote.click(); 124 | let messageBoxP = (await tab).findElement( 125 | swd.By.css("textarea[name='message']") 126 | ); 127 | let messageBox = await messageBoxP; 128 | 129 | await messageBox.sendKeys("Hi " + name + ", " + myMessage); 130 | let doneP = (await tab).findElement( 131 | swd.By.css("button[aria-label='Send now']") 132 | ); 133 | let done = await doneP; 134 | await done.click(); 135 | await tab; 136 | requestCount++; 137 | resolve(); 138 | }) 139 | .catch((err) => { 140 | console.log(err); 141 | resolve(); 142 | }); 143 | }); 144 | }) 145 | .catch(function (err) { 146 | console.log("inside f" + err); 147 | resolve(); 148 | }); 149 | }); 150 | } 151 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lec_8_automation", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@nodelib/fs.scandir": { 8 | "version": "2.1.3", 9 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", 10 | "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", 11 | "requires": { 12 | "@nodelib/fs.stat": "2.0.3", 13 | "run-parallel": "^1.1.9" 14 | } 15 | }, 16 | "@nodelib/fs.stat": { 17 | "version": "2.0.3", 18 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", 19 | "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" 20 | }, 21 | "@nodelib/fs.walk": { 22 | "version": "1.2.4", 23 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", 24 | "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", 25 | "requires": { 26 | "@nodelib/fs.scandir": "2.1.3", 27 | "fastq": "^1.6.0" 28 | } 29 | }, 30 | "@testim/chrome-version": { 31 | "version": "1.0.7", 32 | "resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.0.7.tgz", 33 | "integrity": "sha512-8UT/J+xqCYfn3fKtOznAibsHpiuDshCb0fwgWxRazTT19Igp9ovoXMPhXyLD6m3CKQGTMHgqoxaFfMWaL40Rnw==" 34 | }, 35 | "@types/glob": { 36 | "version": "7.1.2", 37 | "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.2.tgz", 38 | "integrity": "sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA==", 39 | "requires": { 40 | "@types/minimatch": "*", 41 | "@types/node": "*" 42 | } 43 | }, 44 | "@types/minimatch": { 45 | "version": "3.0.3", 46 | "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", 47 | "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" 48 | }, 49 | "@types/node": { 50 | "version": "14.0.13", 51 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.13.tgz", 52 | "integrity": "sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA==" 53 | }, 54 | "@types/yauzl": { 55 | "version": "2.9.1", 56 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", 57 | "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", 58 | "optional": true, 59 | "requires": { 60 | "@types/node": "*" 61 | } 62 | }, 63 | "aggregate-error": { 64 | "version": "3.0.1", 65 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", 66 | "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", 67 | "requires": { 68 | "clean-stack": "^2.0.0", 69 | "indent-string": "^4.0.0" 70 | } 71 | }, 72 | "array-union": { 73 | "version": "2.1.0", 74 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 75 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" 76 | }, 77 | "axios": { 78 | "version": "0.19.2", 79 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", 80 | "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", 81 | "requires": { 82 | "follow-redirects": "1.5.10" 83 | } 84 | }, 85 | "balanced-match": { 86 | "version": "1.0.0", 87 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 88 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 89 | }, 90 | "brace-expansion": { 91 | "version": "1.1.11", 92 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 93 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 94 | "requires": { 95 | "balanced-match": "^1.0.0", 96 | "concat-map": "0.0.1" 97 | } 98 | }, 99 | "braces": { 100 | "version": "3.0.2", 101 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 102 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 103 | "requires": { 104 | "fill-range": "^7.0.1" 105 | } 106 | }, 107 | "buffer-crc32": { 108 | "version": "0.2.13", 109 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 110 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" 111 | }, 112 | "chromedriver": { 113 | "version": "83.0.0", 114 | "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-83.0.0.tgz", 115 | "integrity": "sha512-AePp9ykma+z4aKPRqlbzvVlc22VsQ6+rgF+0aL3B5onHOncK18dWSkLrSSJMczP/mXILN9ohGsvpuTwoRSj6OQ==", 116 | "requires": { 117 | "@testim/chrome-version": "^1.0.7", 118 | "axios": "^0.19.2", 119 | "del": "^5.1.0", 120 | "extract-zip": "^2.0.0", 121 | "mkdirp": "^1.0.4", 122 | "tcp-port-used": "^1.0.1" 123 | } 124 | }, 125 | "clean-stack": { 126 | "version": "2.2.0", 127 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 128 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" 129 | }, 130 | "concat-map": { 131 | "version": "0.0.1", 132 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 133 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 134 | }, 135 | "core-util-is": { 136 | "version": "1.0.2", 137 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 138 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 139 | }, 140 | "debug": { 141 | "version": "3.1.0", 142 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 143 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 144 | "requires": { 145 | "ms": "2.0.0" 146 | } 147 | }, 148 | "deep-is": { 149 | "version": "0.1.3", 150 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 151 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" 152 | }, 153 | "del": { 154 | "version": "5.1.0", 155 | "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", 156 | "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", 157 | "requires": { 158 | "globby": "^10.0.1", 159 | "graceful-fs": "^4.2.2", 160 | "is-glob": "^4.0.1", 161 | "is-path-cwd": "^2.2.0", 162 | "is-path-inside": "^3.0.1", 163 | "p-map": "^3.0.0", 164 | "rimraf": "^3.0.0", 165 | "slash": "^3.0.0" 166 | } 167 | }, 168 | "dir-glob": { 169 | "version": "3.0.1", 170 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 171 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 172 | "requires": { 173 | "path-type": "^4.0.0" 174 | } 175 | }, 176 | "end-of-stream": { 177 | "version": "1.4.4", 178 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 179 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 180 | "requires": { 181 | "once": "^1.4.0" 182 | } 183 | }, 184 | "extract-zip": { 185 | "version": "2.0.1", 186 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 187 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 188 | "requires": { 189 | "@types/yauzl": "^2.9.1", 190 | "debug": "^4.1.1", 191 | "get-stream": "^5.1.0", 192 | "yauzl": "^2.10.0" 193 | }, 194 | "dependencies": { 195 | "debug": { 196 | "version": "4.1.1", 197 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 198 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 199 | "requires": { 200 | "ms": "^2.1.1" 201 | } 202 | }, 203 | "ms": { 204 | "version": "2.1.2", 205 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 206 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 207 | } 208 | } 209 | }, 210 | "fast-glob": { 211 | "version": "3.2.2", 212 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", 213 | "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", 214 | "requires": { 215 | "@nodelib/fs.stat": "^2.0.2", 216 | "@nodelib/fs.walk": "^1.2.3", 217 | "glob-parent": "^5.1.0", 218 | "merge2": "^1.3.0", 219 | "micromatch": "^4.0.2", 220 | "picomatch": "^2.2.1" 221 | } 222 | }, 223 | "fastq": { 224 | "version": "1.8.0", 225 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", 226 | "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", 227 | "requires": { 228 | "reusify": "^1.0.4" 229 | } 230 | }, 231 | "fd-slicer": { 232 | "version": "1.1.0", 233 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 234 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 235 | "requires": { 236 | "pend": "~1.2.0" 237 | } 238 | }, 239 | "fill-range": { 240 | "version": "7.0.1", 241 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 242 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 243 | "requires": { 244 | "to-regex-range": "^5.0.1" 245 | } 246 | }, 247 | "follow-redirects": { 248 | "version": "1.5.10", 249 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", 250 | "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", 251 | "requires": { 252 | "debug": "=3.1.0" 253 | } 254 | }, 255 | "fs.realpath": { 256 | "version": "1.0.0", 257 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 258 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 259 | }, 260 | "get-stream": { 261 | "version": "5.1.0", 262 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", 263 | "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", 264 | "requires": { 265 | "pump": "^3.0.0" 266 | } 267 | }, 268 | "glob": { 269 | "version": "7.1.6", 270 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 271 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 272 | "requires": { 273 | "fs.realpath": "^1.0.0", 274 | "inflight": "^1.0.4", 275 | "inherits": "2", 276 | "minimatch": "^3.0.4", 277 | "once": "^1.3.0", 278 | "path-is-absolute": "^1.0.0" 279 | } 280 | }, 281 | "glob-parent": { 282 | "version": "5.1.1", 283 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 284 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 285 | "requires": { 286 | "is-glob": "^4.0.1" 287 | } 288 | }, 289 | "globby": { 290 | "version": "10.0.2", 291 | "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", 292 | "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", 293 | "requires": { 294 | "@types/glob": "^7.1.1", 295 | "array-union": "^2.1.0", 296 | "dir-glob": "^3.0.1", 297 | "fast-glob": "^3.0.3", 298 | "glob": "^7.1.3", 299 | "ignore": "^5.1.1", 300 | "merge2": "^1.2.3", 301 | "slash": "^3.0.0" 302 | } 303 | }, 304 | "graceful-fs": { 305 | "version": "4.2.4", 306 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 307 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" 308 | }, 309 | "ignore": { 310 | "version": "5.1.8", 311 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", 312 | "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" 313 | }, 314 | "immediate": { 315 | "version": "3.0.6", 316 | "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", 317 | "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" 318 | }, 319 | "indent-string": { 320 | "version": "4.0.0", 321 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 322 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" 323 | }, 324 | "inflight": { 325 | "version": "1.0.6", 326 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 327 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 328 | "requires": { 329 | "once": "^1.3.0", 330 | "wrappy": "1" 331 | } 332 | }, 333 | "inherits": { 334 | "version": "2.0.4", 335 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 336 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 337 | }, 338 | "ip-regex": { 339 | "version": "2.1.0", 340 | "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", 341 | "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" 342 | }, 343 | "is-extglob": { 344 | "version": "2.1.1", 345 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 346 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 347 | }, 348 | "is-glob": { 349 | "version": "4.0.1", 350 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 351 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 352 | "requires": { 353 | "is-extglob": "^2.1.1" 354 | } 355 | }, 356 | "is-number": { 357 | "version": "7.0.0", 358 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 359 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 360 | }, 361 | "is-path-cwd": { 362 | "version": "2.2.0", 363 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", 364 | "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" 365 | }, 366 | "is-path-inside": { 367 | "version": "3.0.2", 368 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", 369 | "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==" 370 | }, 371 | "is-url": { 372 | "version": "1.2.4", 373 | "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", 374 | "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" 375 | }, 376 | "is2": { 377 | "version": "2.0.1", 378 | "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.1.tgz", 379 | "integrity": "sha512-+WaJvnaA7aJySz2q/8sLjMb2Mw14KTplHmSwcSpZ/fWJPkUmqw3YTzSWbPJ7OAwRvdYTWF2Wg+yYJ1AdP5Z8CA==", 380 | "requires": { 381 | "deep-is": "^0.1.3", 382 | "ip-regex": "^2.1.0", 383 | "is-url": "^1.2.2" 384 | } 385 | }, 386 | "isarray": { 387 | "version": "1.0.0", 388 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 389 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 390 | }, 391 | "jszip": { 392 | "version": "3.4.0", 393 | "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.4.0.tgz", 394 | "integrity": "sha512-gZAOYuPl4EhPTXT0GjhI3o+ZAz3su6EhLrKUoAivcKqyqC7laS5JEv4XWZND9BgcDcF83vI85yGbDmDR6UhrIg==", 395 | "requires": { 396 | "lie": "~3.3.0", 397 | "pako": "~1.0.2", 398 | "readable-stream": "~2.3.6", 399 | "set-immediate-shim": "~1.0.1" 400 | } 401 | }, 402 | "lie": { 403 | "version": "3.3.0", 404 | "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", 405 | "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", 406 | "requires": { 407 | "immediate": "~3.0.5" 408 | } 409 | }, 410 | "merge2": { 411 | "version": "1.4.1", 412 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 413 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" 414 | }, 415 | "micromatch": { 416 | "version": "4.0.2", 417 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", 418 | "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", 419 | "requires": { 420 | "braces": "^3.0.1", 421 | "picomatch": "^2.0.5" 422 | } 423 | }, 424 | "minimatch": { 425 | "version": "3.0.4", 426 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 427 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 428 | "requires": { 429 | "brace-expansion": "^1.1.7" 430 | } 431 | }, 432 | "mkdirp": { 433 | "version": "1.0.4", 434 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 435 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" 436 | }, 437 | "ms": { 438 | "version": "2.0.0", 439 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 440 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 441 | }, 442 | "once": { 443 | "version": "1.4.0", 444 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 445 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 446 | "requires": { 447 | "wrappy": "1" 448 | } 449 | }, 450 | "os-tmpdir": { 451 | "version": "1.0.2", 452 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 453 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 454 | }, 455 | "p-map": { 456 | "version": "3.0.0", 457 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", 458 | "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", 459 | "requires": { 460 | "aggregate-error": "^3.0.0" 461 | } 462 | }, 463 | "pako": { 464 | "version": "1.0.11", 465 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", 466 | "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" 467 | }, 468 | "path-is-absolute": { 469 | "version": "1.0.1", 470 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 471 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 472 | }, 473 | "path-type": { 474 | "version": "4.0.0", 475 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 476 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" 477 | }, 478 | "pend": { 479 | "version": "1.2.0", 480 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 481 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" 482 | }, 483 | "picomatch": { 484 | "version": "2.2.2", 485 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 486 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" 487 | }, 488 | "process-nextick-args": { 489 | "version": "2.0.1", 490 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 491 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 492 | }, 493 | "pump": { 494 | "version": "3.0.0", 495 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 496 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 497 | "requires": { 498 | "end-of-stream": "^1.1.0", 499 | "once": "^1.3.1" 500 | } 501 | }, 502 | "readable-stream": { 503 | "version": "2.3.7", 504 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 505 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 506 | "requires": { 507 | "core-util-is": "~1.0.0", 508 | "inherits": "~2.0.3", 509 | "isarray": "~1.0.0", 510 | "process-nextick-args": "~2.0.0", 511 | "safe-buffer": "~5.1.1", 512 | "string_decoder": "~1.1.1", 513 | "util-deprecate": "~1.0.1" 514 | } 515 | }, 516 | "reusify": { 517 | "version": "1.0.4", 518 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 519 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" 520 | }, 521 | "rimraf": { 522 | "version": "3.0.2", 523 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 524 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 525 | "requires": { 526 | "glob": "^7.1.3" 527 | } 528 | }, 529 | "run-parallel": { 530 | "version": "1.1.9", 531 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", 532 | "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" 533 | }, 534 | "safe-buffer": { 535 | "version": "5.1.2", 536 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 537 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 538 | }, 539 | "selenium-webdriver": { 540 | "version": "4.0.0-alpha.7", 541 | "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.7.tgz", 542 | "integrity": "sha512-D4qnTsyTr91jT8f7MfN+OwY0IlU5+5FmlO5xlgRUV6hDEV8JyYx2NerdTEqDDkNq7RZDYc4VoPALk8l578RBHw==", 543 | "requires": { 544 | "jszip": "^3.2.2", 545 | "rimraf": "^2.7.1", 546 | "tmp": "0.0.30" 547 | }, 548 | "dependencies": { 549 | "rimraf": { 550 | "version": "2.7.1", 551 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 552 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 553 | "requires": { 554 | "glob": "^7.1.3" 555 | } 556 | } 557 | } 558 | }, 559 | "set-immediate-shim": { 560 | "version": "1.0.1", 561 | "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", 562 | "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" 563 | }, 564 | "slash": { 565 | "version": "3.0.0", 566 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 567 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" 568 | }, 569 | "string_decoder": { 570 | "version": "1.1.1", 571 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 572 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 573 | "requires": { 574 | "safe-buffer": "~5.1.0" 575 | } 576 | }, 577 | "tcp-port-used": { 578 | "version": "1.0.1", 579 | "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.1.tgz", 580 | "integrity": "sha512-rwi5xJeU6utXoEIiMvVBMc9eJ2/ofzB+7nLOdnZuFTmNCLqRiQh2sMG9MqCxHU/69VC/Fwp5dV9306Qd54ll1Q==", 581 | "requires": { 582 | "debug": "4.1.0", 583 | "is2": "2.0.1" 584 | }, 585 | "dependencies": { 586 | "debug": { 587 | "version": "4.1.0", 588 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", 589 | "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", 590 | "requires": { 591 | "ms": "^2.1.1" 592 | } 593 | }, 594 | "ms": { 595 | "version": "2.1.2", 596 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 597 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 598 | } 599 | } 600 | }, 601 | "tmp": { 602 | "version": "0.0.30", 603 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", 604 | "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", 605 | "requires": { 606 | "os-tmpdir": "~1.0.1" 607 | } 608 | }, 609 | "to-regex-range": { 610 | "version": "5.0.1", 611 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 612 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 613 | "requires": { 614 | "is-number": "^7.0.0" 615 | } 616 | }, 617 | "util-deprecate": { 618 | "version": "1.0.2", 619 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 620 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 621 | }, 622 | "wrappy": { 623 | "version": "1.0.2", 624 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 625 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 626 | }, 627 | "yauzl": { 628 | "version": "2.10.0", 629 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 630 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 631 | "requires": { 632 | "buffer-crc32": "~0.2.3", 633 | "fd-slicer": "~1.1.0" 634 | } 635 | } 636 | } 637 | } 638 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lec_8_automation", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "chromedriver": "^83.0.0", 13 | "selenium-webdriver": "^4.0.0-alpha.7" 14 | } 15 | } 16 | --------------------------------------------------------------------------------