cf / src /solveTurnstile.max.js
RynnHub's picture
hmm
87be38f
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;