| |
| |
| |
| async function recaptchaV3({ domain, siteKey, action, proxy }, page) { |
| if (!domain) throw new Error("Missing domain parameter"); |
| if (!siteKey) throw new Error("Missing siteKey parameter"); |
|
|
| const timeout = 120000; |
|
|
| return new Promise(async (resolve, reject) => { |
| let isResolved = false; |
|
|
| const cl = setTimeout(() => { |
| if (!isResolved) { |
| isResolved = true; |
| reject(new Error("Timeout Error")); |
| } |
| }, timeout); |
|
|
| try { |
| if (proxy?.username && proxy?.password) { |
| await page.authenticate({ |
| username: proxy.username, |
| password: proxy.password, |
| }); |
| } |
|
|
| await page.goto(domain, { waitUntil: "domcontentloaded" }); |
|
|
| await page.addScriptTag({ url: "https://www.google.com/recaptcha/api.js?render=" + siteKey }); |
|
|
| const token = await page.evaluate(async (siteKey, action) => { |
| return await grecaptcha.execute(siteKey, { action: action || "login" }); |
| }, siteKey, action); |
|
|
| isResolved = true; |
| clearTimeout(cl); |
|
|
| if (!token || token.length < 10) { |
| reject(new Error("Failed to get token")); |
| } else { |
| resolve({ token: token, type: "recaptcha3" }); |
| } |
| } catch (e) { |
| if (!isResolved) { |
| isResolved = true; |
| clearTimeout(cl); |
| reject(e); |
| } |
| } |
| }); |
| } |
|
|
| module.exports = recaptchaV3; |