File size: 2,253 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 |
function solveTurnstileMin({ url, proxy, siteKey }) {
return new Promise(async (resolve, reject) => {
if (!url) return reject("Missing url parameter");
if (!siteKey) return reject("Missing siteKey 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.setRequestInterception(true);
page.on("request", async (request) => {
if (
[url, url + "/"].includes(request.url()) &&
request.resourceType() === "document"
) {
const response = await request.respond({
status: 200,
contentType: "text/html",
body: String(
require("fs").readFileSync("./src/fakePage.html")
).replace(/<site-key>/g, siteKey),
});
} else {
await request.continue();
}
});
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) {
if (!isResolved) {
await context.close();
clearInterval(cl);
reject(e.message);
}
}
});
}
module.exports = solveTurnstileMin;
|