File size: 1,658 Bytes
c527565
 
784d702
c527565
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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);
        }
    });
};