File size: 2,225 Bytes
87be38f |
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 |
const fs = require("fs");
function solveTurnstileMin({ url, proxy }) {
return new Promise(async (resolve, reject) => {
if (!url) return reject("Missing url parameter");
const context = await global.browser
.createBrowserContext({
proxyServer: proxy ? `http://${proxy.host}:${proxy.port}` : undefined, // https://pptr.dev/api/puppeteer.browsercontextoptions
})
.catch(() => null);
if (!context) return reject("Failed to create browser context");
let isResolved = false;
var cl = setTimeout(async () => {
if (!isResolved) {
await context.close();
reject("Timeout Error");
}
}, global.timeOut || 60000);
try {
const page = await context.newPage();
if (proxy?.username && proxy?.password)
await page.authenticate({
username: proxy.username,
password: proxy.password,
});
await page.evaluateOnNewDocument(() => {
let token = null;
async function waitForToken() {
while (!token) {
try {
token = window.turnstile.getResponse();
} catch (e) {}
await new Promise((resolve) => setTimeout(resolve, 500));
}
var c = document.createElement("input");
c.type = "hidden";
c.name = "cf-response";
c.value = token;
document.body.appendChild(c);
}
waitForToken();
});
await page.goto(url, {
waitUntil: "domcontentloaded",
});
await page.waitForSelector('[name="cf-response"]', {
timeout: 60000,
});
const token = await page.evaluate(() => {
try {
return document.querySelector('[name="cf-response"]').value;
} catch (e) {
return null;
}
});
isResolved = true;
clearInterval(cl);
await context.close();
if (!token || token.length < 10) return reject("Failed to get token");
return resolve(token);
} catch (e) {
console.log(e);
if (!isResolved) {
await context.close();
clearInterval(cl);
reject(e.message);
}
}
});
}
module.exports = solveTurnstileMin;
|