如何绕过无头版reCaptcha V2?适配无浏览器环境
无头版reCaptcha V2 无浏览器环境下的登录解决方案
针对你用requests/BeautifulSoup/Twill爬取wearedevs.net时遇到的无头reCaptcha V2拦截、API调用404及无法获取g-recaptcha-response的问题,提供以下可行方案:
1. 修正请求逻辑,模拟真人行为特征
无头reCaptcha核心通过分析请求链和行为模式识别机器人,先把基础请求伪装到位:
- 完善请求头:必须携带主流浏览器的
User-Agent、登录页作为Referer,补充Accept-Language、Accept-Encoding、Sec-Ch-Ua系列头部(直接复制真实Chrome请求头);先GET登录页获取初始Cookie,再发起POST登录请求,不要直接调用API。 - 控制请求节奏:GET登录页后停留2-5秒再提交登录,批量操作时每两次请求间隔至少3秒,避免高频触发拦截。
- 检查API参数:确认登录API的
Content-Type为application/json,不要用表单格式提交;检查是否遗漏remember等隐藏字段(可从登录页源码的表单中提取)。
示例代码(requests):
import requests import time session = requests.Session() headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", "Referer": "https://wearedevs.net/login", "Accept-Language": "en-US,en;q=0.9", "Accept-Encoding": "gzip, deflate, br", "Sec-Ch-Ua": "\"Chromium\";v=\"118\", \"Google Chrome\";v=\"118\", \"Not=A?Brand\";v=\"99\"", "Sec-Ch-Ua-Mobile": "?0", "Sec-Ch-Ua-Platform": "\"Windows\"", "Content-Type": "application/json" } # 先访问登录页获取Cookie和页面上下文 session.get("https://wearedevs.net/login", headers=headers) time.sleep(3) # 构造登录请求体(替换为你的账号密码) login_payload = { "email": "your_account@example.com", "password": "your_password", "remember": True, "g-recaptcha-response": "" # 待填充有效响应值 } response = session.post( "https://wearedevs.net/api/v1/account/login", json=login_payload, headers=headers ) print(response.status_code, response.text)
2. 借助第三方验证码服务获取有效响应值
无浏览器环境下无法自行完成无头reCaptcha的行为验证,可选择支持无头reCaptcha V2的验证码识别服务:
- 从登录页源码中提取
data-sitekey(搜索g-recaptcha标签的该属性),将site key和目标URL提交给第三方服务,获取返回的g-recaptcha-response值,直接填入请求体。 - 这类服务多为付费模式,但稳定性较高,适合批量爬取需求。
3. 排查404错误的可能原因
你之前调用API返回404,大概率是请求方式或参数有误:
- 确认API路径是否正确,可通过浏览器开发者工具的Network面板,查看真实登录时的请求URL(有时会有重定向或路径拼写差异)。
- 检查是否需要携带特定Cookie,比如访问登录页时设置的
XSRF-TOKEN或类似标识,需在POST请求中一并携带。
内容的提问来源于stack exchange,提问作者TCK
相关产品推荐
相关产品推荐

