如何用已破解的reCAPTCHA结合Python Requests抓取重定向页面
解决reCAPTCHA验证后无法访问目标页面的问题
你遇到的核心问题是POST验证请求时的参数、请求头或reCAPTCHA配置不符合服务器校验逻辑,以下是具体修复方案:
关键问题排查与修复
修正Referer请求头
手动验证时,POST到/imahuman的Referer是原目标页https://isoms.lasallecounty.org/portal/Jail,而非验证页本身。你的代码里Referer设成了验证页,这会被服务器判定为异常请求。补充ReturnUrl参数
服务器需要明确验证通过后重定向的目标地址,手动提交的表单里必然包含ReturnUrl=/portal/Jail参数,你的代码里缺失了这个关键项。指定reCAPTCHA V3的Action
reCAPTCHA V3的验证需要匹配页面指定的action值,你需要先手动抓包找到验证页的action(比如可能是portal_imahuman或类似),然后在solver中设置该值,否则验证分数可能不达标。
修改后的完整代码
import os import requests from bs4 import BeautifulSoup from anticaptchaofficial.recaptchav3proxyless import recaptchaV3Proxyless # 初始化Session和请求头 headers = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" } session = requests.Session() # 初始请求获取验证令牌、SiteKey和必要Cookie response = session.get("https://isoms.lasallecounty.org/portal/Jail") # 自动重定向到/imahuman soup = BeautifulSoup(response.text, "lxml") token = soup.find("input", {"name": "__RequestVerificationToken"})["value"] site_key = soup.find("div", {"id": "recaptcha"})["data-sitekey"] # 抓包获取的reCAPTCHA Action,替换为实际值 captcha_action = "your_captcha_action_here" # 调用Anti-Captcha求解reCAPTCHA V3 solver = recaptchaV3Proxyless() solver.set_verbose(1) solver.set_key(os.getenv("ANTICAPTCHA_API_KEY")) solver.set_website_url("https://isoms.lasallecounty.org/portal/imahuman") solver.set_website_key(site_key) solver.set_action(captcha_action) # 新增Action设置 solver.set_min_score(0.9) g_response = solver.solve_and_return_solution() if g_response != 0: print("reCAPTCHA验证成功!") else: print(f"验证失败,错误码:{solver.error_code}") exit() # 构造完整的POST参数,包含ReturnUrl data = { "g-recaptcha-response": g_response, "__RequestVerificationToken": token, "ReturnUrl": "/portal/Jail" # 新增重定向目标参数 } # 更新Referer为原目标页 headers["Referer"] = "https://isoms.lasallecounty.org/portal/Jail" # 提交验证请求 response = session.post( "https://isoms.lasallecounty.org/portal/imahuman", headers=headers, data=data, allow_redirects=True ) # 检查是否成功访问目标页 if "/portal/Jail" in response.url: print("目标页面访问成功!") # 这里可以处理response.text获取页面内容 else: print(f"请求失败,当前URL:{response.url}") print(f"响应状态码:{response.status_code}")
额外注意事项
- 抓包确认Action值:用浏览器开发者工具的Network面板,找到reCAPTCHA的请求(通常是
https://www.google.com/recaptcha/api2/reload或V3的/siteverify相关请求),查看其中的action参数值,替换代码中的your_captcha_action_here。 - Cookie一致性:确保Session全程复用,不要中途创建新的Session,避免丢失服务器设置的会话Cookie。
- 状态码与响应内容排查:如果还是失败,打印
response.text查看服务器返回的具体错误信息,比如令牌无效、验证分数不足等,针对性调整。
内容的提问来源于stack exchange,提问作者OJT
相关产品推荐
相关产品推荐

