使用Python Requests绕过reCAPTCHA v2遇到问题求助
问题排查与修复建议
以下是你代码中可能导致reCAPTCHA验证失败的几个关键问题:
1. Payload字典语法错误
你的payload中第一行存在语法错误:
'oculto:' 'AvancarC'
- 键名多了冒号,正确键名应为
'oculto' - 缺少逗号,导致字典结构非法,Python运行时会抛出语法异常或解析错误
修正后:
payload = { 'oculto': 'AvancarC', 'placa': placa, 'renavam': renavam, 'g-recaptcha-response': resposta_captcha['code'], 'btnConsultaPlaca': '' }
2. 正则表达式匹配SiteKey失败
你用来提取reCAPTCHA SiteKey的正则存在逻辑错误:
rgxCaptchaKey = re.search(r'<div\s*class="g-recaptcha"\s*data-\s*sitekey="([^\"]*?)"></div>', html, re.IGNORECASE)
其中data-\s*sitekey会匹配data- sitekey(带空格的场景),但实际页面中是data-sitekey(无空格),导致无法正确提取SiteKey,后续验证码响应自然无效。
修正正则:
rgxCaptchaKey = re.search(r'<div\s*class="g-recaptcha"\s*data-sitekey="([^\"]*?)"></div>', html, re.IGNORECASE)
或简化为更鲁棒的匹配逻辑:
rgxCaptchaKey = re.search(r'data-sitekey="([^"]+)"', html)
3. Session使用不当
你已经初始化了requests.session(),session会自动维护请求间的cookies,无需手动提取cookie = fazer_get.cookies再传给post请求,手动传参可能导致cookies丢失或冲突。
修正POST请求:
fazerPost = session.post( url, data=payload, # 明确指定data参数,避免参数歧义 headers=headers )
4. 缺少必要的请求头字段
POST请求需要指定Content-Type,否则服务器可能无法正确解析表单数据。在headers中添加:
headers = { 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36', 'Content-Type': 'application/x-www-form-urlencoded' }
5. 表单字段有效性问题
- 巴西车牌(placa)通常为7位格式(如
PCJ9012),你传入的pcj90长度不足,服务器会直接拒绝请求 - Renavam通常为11位数字,
57940长度不符合要求,也会导致验证失败
确保传入的placa和renavam是完整有效的值。
6. CAPTCHA响应有效性验证
确认你使用的captcha函数(第三方验证码服务)返回的resposta_captcha['code']有效:
- 打印
captchaKey确认SiteKey已正确提取 - 验证验证码服务的API密钥(
KEY)有效,且请求参数(如pageurl)与目标页面完全一致 - 可尝试手动在浏览器中获取一次g-recaptcha-response,替换到代码中测试提交是否成功,以此排除验证码服务的问题
内容的提问来源于stack exchange,提问作者Sóstenes Jordan
相关产品推荐
相关产品推荐

