-
Notifications
You must be signed in to change notification settings - Fork 84
/
pageController.js
60 lines (46 loc) · 1.67 KB
/
pageController.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
const { createCursor } = require('ghost-cursor');
const { checkTurnstile } = require('./turnstile.js');
const kill = require('tree-kill');
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
async function pageController({ browser, page, proxy, turnstile, xvfbsession, pid }) {
let solveStatus = turnstile
page.on('close', () => {
solveStatus = false
});
browser.on('disconnected', async () => {
solveStatus = false
if (xvfbsession) try { xvfbsession.stopSync() } catch (err) { }
if (pid) try { kill(pid, 'SIGKILL') } catch (err) { }
});
async function turnstileSolver() {
while (solveStatus) {
await checkTurnstile({ page }).catch(() => { });
await new Promise(r => setTimeout(r, 1000));
}
return
}
turnstileSolver()
if (proxy.username && proxy.password) await page.authenticate({ username: proxy.username, password: proxy.password });
await page.evaluateOnNewDocument(() => {
Object.defineProperty(MouseEvent.prototype, 'screenX', {
get: function () {
return this.clientX + window.screenX;
}
});
Object.defineProperty(MouseEvent.prototype, 'screenY', {
get: function () {
return this.clientY + window.screenY;
}
});
});
const cursor = createCursor(page);
await cursor.moveTo({ x: getRandomInt(0, 800), y: getRandomInt(0, 600) });
page.realCursor = cursor
page.realClick = cursor.click
return page
}
module.exports = { pageController }