使用2captcha api 绕过亚马逊文本验证码 | Nestbrowser


在Nestbrowser中使用2captcha api 自动化的Amazon验证码识别过程示例

在网络安全领域中,验证码是抵御机器人和自动化脚本攻击的首要防线。验证码设计旨在区分人类用户和机器人。亚马逊Web应用程序防火墙(WAF)是一个这样的验证码系统。本博客将指导您如何使用Nestbrowser + 2captcha 绕过Amazon WAF。

Nestbrowser 使用2captcha api 绕过 amazon 文本验证码示例

以下是Amazon 文本验证码的示例:

2captcha-amazon-c1

1 2const amazonNormalCaptcha = async (page) => { 3 // 进行页面截图获取base64 4 const screenshot = await page.screenshot(); 5 const image = new Buffer(screenshot).toString('base64'); 6 7 // 与 2captcha api 通讯的form表单, 需要提供您的2captcha apiKey 8 let formData = new FormData(); 9 formData.append('key', 'your 2captcha apiKey'); 10 formData.append('method', 'base64'); 11 formData.append('body', image); 12 13 // 使用 Nestbrowser 内置的请求库 14 const { data: resp } = await axios({ 15 method: 'post', 16 url: 'http://2captcha.com/in.php', 17 data: formData, 18 headers: { 19 'Content-Type': `multipart/form-data; boundary=${formData._boundary}`, // 设置正确的Content-Type 20 }, 21 responseType: 'text', 22 }); 23 const text = resp.data; 24 25 // 获取 2captcha 返回的验证码处理ID 26 const captchaId = text.split('|')[1]; 27 28 // 返回 CAPCHA_NOT_READY 说明 2captcha 仍未识别完毕 29 let captchaSolution = 'CAPCHA_NOT_READY'; 30 let retry = 0; 31 while (captchaSolution && captchaSolution === 'CAPCHA_NOT_READY') { 32 if (retry > 10) { 33 break; 34 } 35 const response = await axios({ 36 method: 'get', 37 url: `http://2captcha.com/res.php?key=your 2captcha apiKey&action=get&id=${captchaId}`, 38 responseType: 'text', // 不要自动解析响应体为 JSON 39 }); 40 const tt = response.data; 41 const tmp = tt.split('|')[1]; 42 if (tmp) { 43 captchaSolution = tmp; 44 } 45 if (captchaSolution && captchaSolution != 'CAPCHA_NOT_READY') { 46 break; 47 } 48 console.log(' - sleep 2s - '); 49 await sleep(2000); 50 retry++; 51 } 52 53 // 根据 2captcha api 返回的识别码填入输入框并提交 54 await page.locator('input#captchacharacters').type(captchaSolution); 55 await page.locator("button[type='submit']").click(); 56}; 57 58// 是否有验证码 59const hadCaptcha = await page 60 .locator('input#captchacharacters') 61 .isVisible(); 62if (hadCaptcha) { 63 await amazonNormalCaptcha(page); 64 await page.waitForLoadState(); 65 await page.waitForTimeout(3000); 66} 67