-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
139 lines (122 loc) · 5.87 KB
/
server.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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
var webdriver = require('selenium-webdriver');
var settings = require('./settings.json');
var Promise = require('promise');
var fs = require('fs');
var parseXlsx = require('excel');
var users = [];
var userLike = 0;
var likes = 0;
parseXlsx('in.xlsx', function(err, data) {
if(err) throw err;
for(var i = 811; i<data.length; i++){
users.push(data[i][0]);
if(i == 815) break;
}
// data is an array of arrays
});
//var xpath_first_photo = '//header/../div/div/div[1]/a[1]';
var xpath_first_photo = '//body/span[1]/section[1]/main[1]/article[1]/div[1]/div[1]/div[1]/div[1]';
var xpath_like_class = '//div[@id="fb-root"]/following-sibling::div[1]/div/div/following-sibling::div[1]/div/div[2]/div[1]/article/div[2]/section/a/span';
var xpath_like_button = '//div[@id="fb-root"]/following-sibling::div[1]/div/div/following-sibling::div[1]/div/div[2]/div[1]/article/div[2]/section/a';
var xpath_nextprev_buttons = '//div[@id="fb-root"]/following-sibling::div[1]/div/div/following-sibling::div[1]/div/div/div/div/a';
var xpath_following = '//div[@id="fb-root"]/following-sibling::div[1]/div/div/following-sibling::div[1]/div/div[2]/div[1]/article/header/span/button';
var By = require('selenium-webdriver').By;
var until = require('selenium-webdriver').until;
var driver = new webdriver.Builder().forBrowser('firefox').build();
//driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.get('https://www.instagram.com/accounts/login/');
driver.sleep(settings.sleep_delay);
driver.findElement(By.name('username')).sendKeys(settings.instagram_account_username);
driver.findElement(By.name('password')).sendKeys(settings.instagram_account_password);
driver.findElement(By.xpath('//button')).click();
driver.sleep(settings.sleep_delay).then(function() {
like_by_nickname(0);
});
function like_by_nickname(indexNickname) {
if (indexNickname >= users.length) {
fs.appendFileSync("Log.txt", "Everything is done. Finishing...!"+'\r\n');
console.info('Everything is done. Finishing...');
fs.appendFileSync("Log.txt", "=========== ");
fs.appendFileSync("Log.txt", "===LIKES=== "+likes+'\r\n');
fs.appendFileSync("Log.txt", "===USERS=== "+userLike+'\r\n');
fs.appendFileSync("Log.txt", "=========== ");
driver.quit();
return;
}
var promise = new Promise(function (resolve, reject) {
driver.sleep(settings.sleep_delay);
console.info('Doing likes for: ' + users[indexNickname]);
fs.appendFileSync("Log.txt", 'Doing likes for: ' + users[indexNickname]+'\r\n');
driver.get('https://instagram.com/' + users[indexNickname]);
driver.sleep(settings.sleep_delay);
driver.findElement(By.xpath(xpath_first_photo)).click().then(function () {
userLike++;
like(resolve, 0, settings.like_depth_per_user);
}).catch(function(e) {
console.log("====ERROR===== "+e.message);
fs.appendFileSync("Log.txt", "====ERROR===== "+e.message+'\r\n');
indexNickname++;
like_by_nickname(indexNickname);
});
});
promise.then(function() {
indexNickname++;
like_by_nickname(indexNickname);
})
};
function like(resolve, index, max_likes) {
driver.getCurrentUrl().then(function(url) {
driver.sleep(settings.10000);
driver.findElement(By.xpath(xpath_following)).getAttribute('class').then(function(classname) {
if(classname.indexOf('_6y2ah') < 0){
driver.findElement(By.xpath(xpath_following)).click().then(function () {
fs.appendFileSync("Log.txt", 'Following'+'\r\n');
}).catch(function (e) {
console.log("ERROR "+e.message)
fs.appendFileSync("Log.txt", '====Error Following==== '+e.message+'\r\n');
});
}
});
console.info('Current url: ' + url);
fs.appendFileSync("Log.txt", 'Current url: ' + url+'\r\n');
//driver.sleep(settings.sleep_delay);
driver.findElement(By.xpath(xpath_like_class)).getAttribute('class').then(function(classname) {
console.info('CSS Classname: ' + classname);
if (settings.smart_like_mode && (classname.indexOf('coreSpriteHeartFull') > 0)) {
console.info('Already liked. Stopping...');
fs.appendFileSync("Log.txt", 'Already liked. Stopping...'+'\r\n');
resolve();
return;
} else {
if (classname.indexOf('coreSpriteHeartOpen') > 0) {
driver.findElement(By.xpath(xpath_like_button)).click();
driver.sleep(settings.sleep_delay);
};
// Analyzing "Next" button availability
driver.findElements(By.xpath(xpath_nextprev_buttons)).then(function(buttons) {
console.info('Buttons: ' + buttons.length + ', Photo Index: ' + index);
if (((index == 0) && (buttons.length == 1)) || (buttons.length == 2)) {
buttons[buttons.length - 1].click().then(function() {
// if we exceed maximum likes depth, stop like this current user.
index++;
likes++;
if (index == max_likes) {
resolve();
return;
}
like(resolve, index, max_likes);
});
} else {
// "Next" button doesn't exist. Stop like this current user.
console.info('Next button does not exist. Stopping...');
fs.appendFileSync("Log.txt", 'Next button does not exist. Stopping...'+'\r\n');
resolve();
return;
}
});
}
});
});
}
//driver.quit();