使用requests库爬取含隐藏参数的登录保护网站遇重定向问题求助
解决登录后仍被重定向到登录页的问题
嘿,你遇到的这个问题太典型啦!很多网站的登录表单都会藏着一些隐藏参数(比如CSRF令牌),用来验证请求的合法性——你只传账号密码的话,服务器根本不认,自然会把你打回登录页。下面给你一步步解决的方案:
核心思路
要成功登录,你得先从登录页面获取那些隐藏的参数,把它们和账号密码一起放进请求payload里,再发送登录请求。另外,还要模拟浏览器的请求头,避免被反爬机制拦截。
修改后的完整代码
首先如果没装BeautifulSoup的话,先安装:
pip install beautifulsoup4
然后是代码:
import requests from bs4 import BeautifulSoup # 模拟浏览器的请求头,避免被识别为爬虫 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } # 基础的账号密码payload payloads = {"login": "pythonusername3", "password": "pythonpassword3"} with requests.Session() as session: # 第一步:先访问登录页面,获取隐藏参数和会话Cookie login_page_response = session.get('https://member.expireddomains.net/login/', headers=headers) soup = BeautifulSoup(login_page_response.text, 'html.parser') # 提取登录表单里所有的隐藏输入字段 hidden_fields = soup.find('form').find_all('input', type='hidden') for field in hidden_fields: # 把隐藏参数添加到payload中 payloads[field['name']] = field['value'] # 第二步:发送完整的登录请求 login_response = session.post( 'https://member.expireddomains.net/login/', data=payloads, headers=headers ) # 可选:检查登录是否成功(状态码、跳转地址) print(f"登录响应状态码: {login_response.status_code}") print(f"登录后跳转地址: {login_response.url}") # 第三步:访问目标页面 target_page_response = session.get( "https://member.expireddomains.net/domains/pendingdelete/?o=statustld_registered&r=d", headers=headers ) print(target_page_response.text)
关键步骤解释
- 获取隐藏参数:先发送GET请求到登录页面,服务器会返回包含隐藏参数的表单,同时设置会话Cookie。用BeautifulSoup解析页面,把所有
<input type="hidden">的字段都提取出来,加到payload里——这些参数是服务器生成的,每次请求可能不一样,必须实时获取。 - 模拟浏览器请求:添加
User-Agent头,让网站认为你是真实用户在访问,而不是爬虫。 - 持续会话:用
requests.Session()保持会话,它会自动保存登录后的Cookie,这样后续访问目标页面时就能带上登录状态。
额外排查技巧
如果还是不行,你可以打开浏览器的开发者工具(F12),切换到Network标签,手动登录一次,查看登录请求的Form Data,看看除了账号密码之外还有哪些参数,确保你的payload里都包含了这些参数。另外,有些网站可能还会验证Referer头,你可以把它也加到headers里。
内容的提问来源于stack exchange,提问作者Nazim Kerimbekov
相关产品推荐
相关产品推荐

