| |
| |
| |
| |
|
|
| async function interstitial({ domain, proxy }, page) { |
| return new Promise(async (resolve, reject) => { |
| if (!domain) return reject(new Error("Missing domain parameter")); |
|
|
| let isResolved = false; |
| let cf_clearance = null; |
|
|
| |
| const timeout = setTimeout(() => { |
| if (!isResolved) { |
| isResolved = true; |
| resolve({ success: false, error: "Timeout nungguan Cloudflare" }); |
| } |
| }, 60000); |
|
|
| try { |
| |
| page.on('response', async (response) => { |
| try { |
| const cookies = await page.cookies(); |
| const found = cookies.find(c => c.name === 'cf_clearance'); |
| if (found && !isResolved) { |
| cf_clearance = found.value; |
| const userAgent = await page.evaluate(() => navigator.userAgent); |
| const cookieString = cookies.map(c => `${c.name}=${c.value}`).join('; '); |
|
|
| isResolved = true; |
| clearTimeout(timeout); |
| |
| resolve({ |
| success: true, |
| cf_clearance: cf_clearance, |
| user_agent: userAgent, |
| full_cookies: cookieString |
| }); |
| } |
| } catch (_) {} |
| }); |
|
|
| |
| |
| await page.goto(domain, { waitUntil: 'networkidle2', timeout: 60000 }); |
|
|
| |
| await page.mouse.move(100, 100); |
| await page.mouse.move(200, 300, { steps: 5 }); |
|
|
| |
| const turnstileIframe = await page.$('iframe[src*="challenges"]'); |
| if (turnstileIframe) { |
| console.log("[*] Turnstile detected, waiting 10s..."); |
| await new Promise(r => setTimeout(r, 10000)); |
| } |
|
|
| |
| if (!isResolved) { |
| const cookies = await page.cookies(); |
| const found = cookies.find(c => c.name === 'cf_clearance'); |
| if (found) { |
| const userAgent = await page.evaluate(() => navigator.userAgent); |
| isResolved = true; |
| clearTimeout(timeout); |
| resolve({ |
| success: true, |
| cf_clearance: found.value, |
| user_agent: userAgent, |
| full_cookies: cookies.map(c => `${c.name}=${c.value}`).join('; ') |
| }); |
| } |
| } |
|
|
| } catch (err) { |
| if (!isResolved) { |
| isResolved = true; |
| clearTimeout(timeout); |
| reject(err); |
| } |
| } |
| }); |
| } |
|
|
| |
| module.exports = interstitial; |
|
|