使用Python requests登录网站无法获取正确页面代码,请求技术帮助
问题原因及解决方案
原因分析
- Qrator反机器人拦截:该网站部署了Qrator反爬系统,返回的
/__qrator/qauth_utm_v2.js是其验证流程的核心部分,用于检测请求是否来自真实浏览器。requests库仅能发送纯HTTP请求,无法执行JavaScript,因此无法完成Qrator的人机验证,被系统拦截后返回极简验证页面。 - 请求上下文不完整:直接发送POST登录请求时,缺少了访问登录页时生成的关键Cookie(如Qrator的会话验证Cookie、CSRF令牌等),以及浏览器特有的请求头信息(如完整的
User-Agent、Referer、Accept-Language等),导致系统判定请求异常。 - 缺失前置验证参数:登录页通过JavaScript生成了隐藏的验证参数(如CSRF token、Qrator的验证令牌),直接POST登录账号密码时未携带这些参数,验证失败。
解决方法
- 使用JS渲染工具模拟浏览器:
改用Playwright、Selenium这类可以模拟真实浏览器行为的库,它们能自动执行页面JavaScript,完成Qrator的人机验证流程。示例(以Playwright为例):from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=False) page = browser.new_page() page.goto("https://vavadaafh.com/ru/login") # 等待页面加载完成,填写登录信息 page.fill('input[name="login"]', "你的账号") page.fill('input[name="password"]', "你的密码") page.click('button[type="submit"]') # 等待登录跳转,获取页面内容 page.wait_for_load_state("networkidle") print(page.content()) browser.close() - 手动破解Qrator验证(难度较高):
- 先发送GET请求访问登录页,保存响应中的所有Cookie,同时从页面HTML中提取CSRF令牌等参数。
- 下载
/__qrator/qauth_utm_v2.js脚本,使用PyExecJS或Node.js执行该脚本,生成Qrator要求的验证令牌。 - 将生成的令牌、CSRF令牌、登录账号密码一起放入POST请求的表单数据中,带上之前保存的Cookie和完整的浏览器请求头,发送POST请求。
- 补全请求上下文:
复制浏览器登录时的所有请求头(可通过F12开发者工具的Network面板查看),确保requests会话的请求头与浏览器完全一致;先发送GET请求获取登录页的Cookie,再使用同一个会话发送POST登录请求,确保Cookie的连贯性。
内容的提问来源于stack exchange,提问作者jjjjjjjjajjajaja
相关产品推荐
相关产品推荐

