You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Requests登录高校网站时返回相同页面的问题求助

解决Python Requests爬取学校网页的登录问题

嘿,我来帮你搞定这个登录爬取的问题!从你给出的表单代码片段来看,咱们一步步拆解问题,逐个解决:

第一步:先理清登录的核心要素

从你提供的表单里,能提取这些关键信息:

  • 登录请求的提交地址:表单的action是/Home/ValidaAcceso,所以完整URL需要拼接学校域名,比如https://your-school-domain.com/Home/ValidaAcceso(记得替换成实际的学校域名)
  • 请求方法:POST,所以要用Requests的POST方法提交数据
  • 用户名输入框:id="login-username",但表单提交靠的是name属性而非id,你粘贴的代码里name=&q...没写完,一定要去登录页面源码里找到这个输入框的完整name值(比如可能是username或者和id一致的login-username)

第二步:用Session保持会话,获取Cookies和CSRF令牌

大部分学校网站(尤其是ASP.NET框架搭建的)会在登录页面设置CSRF令牌和会话Cookies,用来防止跨站请求伪造。咱们得先访问登录页面拿到这些关键内容:

import requests
from bs4 import BeautifulSoup

# 初始化Session,自动处理Cookies,保持会话状态
session = requests.Session()

# 替换成学校实际的登录页面URL
login_page_url = "https://your-school-domain.com/Home/Login"
# 伪装成浏览器的User-Agent,避免被网站拦截
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"
}

# 访问登录页面,获取Cookies和页面源码
response = session.get(login_page_url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")

# 提取CSRF令牌(不同网站的令牌name可能不同,常见的有__RequestVerificationToken、csrfmiddlewaretoken)
# 你需要在登录页面源码里找类似<input type="hidden" name="xxx" value="xxx">的隐藏字段
csrf_token = soup.find("input", {"name": "__RequestVerificationToken"})["value"]

第三步:准备登录表单数据,提交请求

把所有表单需要的字段整理成字典,包括用户名、密码、CSRF令牌,还有可能存在的隐藏字段(比如returnUrl、__VIEWSTATE这类ASP.NET常见字段,都要从页面源码或浏览器抓包中找到):

# 替换成实际的表单字段名和你的账号密码
login_data = {
    "login-username": "你的学号/用户名",  # 填你找到的用户名输入框的name值
    "login-password": "你的登录密码",  # 同理,找密码输入框的name值
    "__RequestVerificationToken": csrf_token,
    # 如果有其他隐藏字段,比如returnUrl,也要加进来
    # "returnUrl": "/Home/Dashboard"
}

# 提交登录请求
login_action_url = "https://your-school-domain.com/Home/ValidaAcceso"
login_response = session.post(login_action_url, data=login_data, headers=headers)

# 验证登录是否成功:访问一个需要登录才能查看的页面,比如个人主页
dashboard_url = "https://your-school-domain.com/Home/Dashboard"
dashboard_response = session.get(dashboard_url, headers=headers)

# 检查页面内容里的登录成功标识(比如你的名字、"欢迎"字样)
if "欢迎" in dashboard_response.text or "你的名字" in dashboard_response.text:
    print("登录成功!可以开始爬取内容啦~")
else:
    print("登录失败!可能原因:字段名错误、密码不对、CSRF令牌提取错误,或者网站有验证码拦截")

常见坑点提醒

  • 核对所有表单字段:别漏了隐藏字段!可以用浏览器开发者工具(F12)在登录时抓包,查看Form Data里所有提交的键值对,确保你的login_data完全匹配
  • 验证码问题:如果学校网站登录需要验证码,得额外处理(比如手动输入、用OCR工具识别),不过很多校内网站可能没有这个限制
  • 请求头完整性:有些网站会检查Referer头,你可以在POST请求里加上"Referer": login_page_url
  • 证书问题:如果学校网站HTTPS证书有问题,POST时可以临时加verify=False,但这只是应急方案,不推荐长期使用

内容的提问来源于stack exchange,提问作者Nicolas Suarez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:18:52