| module.exports = async function (page, url, siteKey) { | |
| return new Promise(async (resolve, reject) => { | |
| const timeout = setTimeout(() => reject(new Error("Timeout Turnstile")), 30000); | |
| try { | |
| await page.goto(url, { waitUntil: "domcontentloaded" }); | |
| const htmlContent = ` | |
| <!DOCTYPE html> | |
| <html> | |
| <body> | |
| <div class="cf-turnstile" data-sitekey="${siteKey}" data-callback="turnstileCallback"></div> | |
| <script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script> | |
| <script> | |
| function turnstileCallback(token) { | |
| window.cf_token = token; | |
| } | |
| </script> | |
| </body> | |
| </html> | |
| `; | |
| await page.setRequestInterception(true); | |
| page.once('request', request => { | |
| request.respond({ | |
| status: 200, | |
| contentType: 'text/html', | |
| body: htmlContent | |
| }); | |
| }); | |
| await page.reload(); | |
| const waitToken = setInterval(async () => { | |
| const token = await page.evaluate(() => window.cf_token); | |
| if (token) { | |
| clearInterval(waitToken); | |
| clearTimeout(timeout); | |
| resolve({ token: token }); | |
| } | |
| }, 500); | |
| } catch (e) { | |
| clearTimeout(timeout); | |
| reject(e); | |
| } | |
| }); | |
| }; |