-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathnew_visitor.js
104 lines (85 loc) · 3.54 KB
/
new_visitor.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
var page = require('webpage').create();
var system = require('system');
page.target = system.args[1];
page.referer = system.args[2];
page.userAgent = atob(system.args[3]).trim();
page.needDeep = system.args[4];
page.new_resolution = system.args[5].split('x');
page.sleep = system.args[6].split('-');
page.settings.userAgent = page.userAgent; // Set User Agent
page.viewportSize = { // Set page new_resolution
width: page.new_resolution[0],
height: page.new_resolution[1]
};
page.currentDeep = 1;
var expectedContent = '<a id="link" href="' + page.target + '">link</a>'; // set content on page
var expectedLocation = page.referer;
page.setContent(expectedContent, expectedLocation); // set content on page
page.onResourceRequested = function (requestData, networkRequest) { // function to change http headers
//console.log('Request (#' + requestData.id + '): ' + JSON.stringify(requestData));
networkRequest.setHeader('User-Agent', page.userAgent);
// 1920*1080*24 - my default PhantomJS resolution. Change it to yours
var newUrl = requestData.url.replace("1920*1080*24", page.new_resolution[0] + "*" + page.new_resolution[1] + "*" + page.new_resolution[2]);
// change new_resolution
newUrl = newUrl.replace("1920", page.new_resolution[0]);
newUrl = newUrl.replace("1080", page.new_resolution[1]);
newUrl = newUrl.replace("24-bit", page.new_resolution[2] + "-bit");
networkRequest.changeUrl(newUrl); // change Url link
};
page.firstLoad = true;
page.check = true;
page.onLoadFinished = function (status) {
if (page.firstLoad) {
page.firstLoad = page.evaluate(function () {
console.log('Set Referer');
document.getElementById('link').click(); // Click on href
return false;
});
}
else {
if (page.check) { // Asynchrony, forgive me
page.check = false;
window.setInterval(function () {
page.currentDeep++;
if (page.currentDeep > page.needDeep) {
console.log("Finish: " + status);
return close();
}
page.evaluate(function (target, deep) {
if (document.links.length === 0)
return false;
var parseUrl = document.createElement('a');
parseUrl.href = target;
var needLinks = [];
for (var i = 0; i < document.links.length; i++) { // only internal links
if (document.links[i].href.indexOf(parseUrl.hostname) !== -1)
needLinks.push(document.links[i])
}
var random = Math.floor(Math.random() * needLinks.length);
var newLink = document.createElement('a');
newLink.setAttribute('href', needLinks[random].href);
console.log('Deep: ' + deep + ' URL: ' + newLink.href);
newLink.click();
}, page.target, page.currentDeep);
}, Math.round(Math.random() * (page.sleep[1] - page.sleep[0]) + page.sleep[0] * 1000))
}
}
};
function click(el) {
var ev = document.createEvent("MouseEvent");
ev.initMouseEvent( // set click params
"click",
true, true,
window, null,
0, 0, 0, 0,
false, false, false, false,
0, null
);
el.dispatchEvent(ev);
}
page.onConsoleMessage = function (msg) {
console.log(msg);
};
var close = function () { // exit in window.setInterval
phantom.exit();
};