This repository has been archived by the owner on Aug 19, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.js
122 lines (109 loc) · 3.42 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
const puppeteer = require('puppeteer');
const inquirer = require('inquirer');
async function getUserInfo() {
const questions = [
{
type: 'input',
name: 'email',
message: "What's your email?",
},
{
type: 'password',
name: 'password',
message: "What's your password?",
},
];
let answer = {
email: '',
password: '',
};
await inquirer.prompt(questions).then(async answers => {
const regex = new RegExp(
"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$",
);
const isEmail = await regex.exec(answers.email);
if (!answers.email || !answers.password) {
await console.log('Email or password cannot be blank');
await getUserInfo();
} else if (!isEmail) {
await console.log("Email isn't email.");
await getUserInfo();
} else {
answer = {
email: answers.email,
password: answers.password,
};
}
});
return answer;
}
async function login(page) {
await page.waitFor('.login-form'); // wait for login form.
const userInfo = await getUserInfo(); // ask email and password to user.
await page.type('#login-email', userInfo.email); // type email to input.
await page.type('#login-password', userInfo.password); // type password to input.
await Promise.all([
page.click('#login-submit'), // click to login button.
page.waitForNavigation(), // wait for login.
]);
try {
await page.waitForSelector('.login__form', { timeout: 1000 });
console.log('Email or password is wrong. Please try again.');
await page.goto('https://www.linkedin.com'); // go to linkedin.
await login(page);
} catch (error) {
return true;
}
}
async function finishHim(page) {
const deleteButton =
'[data-control-name="A_jobshome_job_delete_application_click"]';
await page.waitFor(1000);
const isDeleteExist = await page.waitForSelector(deleteButton);
if (isDeleteExist) {
await page.click(deleteButton);
} else {
console.log('I think its done.');
}
await page.waitFor(1000);
const isFinishExist = await page.waitForSelector('.artdeco-button--primary');
if (isFinishExist) {
await page.click('.artdeco-button--primary');
const time = new Date().toLocaleString();
await console.log(time + ': 1 deleted.');
} else {
console.log('Something wrong.')
deleteList(page);
}
}
async function deleteList(page) {
await page.waitForSelector('.jobs-activity__list-item');
const buttons = await page.$$('.jobs-activity__list-item');
await console.log('I found something, starting!');
for (let button of buttons) {
await finishHim(page);
}
await page.reload();
await console.log('Page reloaded, just a moment.');
await deleteList(page);
}
async function deleteJob() {
const browser = await puppeteer.launch({
headless: true,
slowMo: 10,
defaultViewport: null,
});
const page = await browser.newPage();
await page.goto('https://www.linkedin.com'); // go to linkedin.
const loginSuccess = await login(page);
if (loginSuccess) {
await console.log('Redirecting to applied page.')
await page.goto('https://www.linkedin.com/jobs/applied/'); // go to linkedin applied page and wait for load.
await deleteList(page);
} else {
await console.log('Something wrong with login. Closing.');
await browser.close;
}
await browser.close;
}
deleteJob();