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

爬取smartschool网站时无法获取PHPSESSID Cookie,登录认证报错求助

爬取Smartschool网站登录认证问题排查

问题详情

因学校项目需求,需爬取https://dbh.smartschool.be/,但登录认证环节遇到报错。

代码实现

import requests

URL = "https://dbh.smartschool.be"
LOGIN_ROUTE = "/login"

HEADERS = {
   "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" ,
   "orgin" : URL,
   "referer" : URL + "/"
}

s = requests.session()

csrf_token = s.get(URL).cookies["PHPSESSID"]

login_payload ={
   "login_form[_username]": "Roel.bellemans",
   "login_form[_password]": "######",
   "login_form[_generationTime]": "1665576878",
   "login_form[_token]": csrf_token
}

login_req = s.post(URL + LOGIN_ROUTE, headers=HEADERS, data=login_payload)
print(login_req)

报错信息

Traceback (most recent call last):
  File "C:\Users\roelb\Desktop\cookie_auth_scraper\logIn.py", line 15, in <module>
    csrf_token = s.get(URL).cookies["PHPSESSID"]
  File "C:\Users\roelb\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\cookies.py", line 334, in __getitem__        
    return self._find_no_duplicates(name)
  File "C:\Users\roelb\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\cookies.py", line 413, in _find_no_duplicates
    raise KeyError(f"name={name!r}, domain={domain!r}, path={path!r}")
KeyError: "name='PHPSESSID', domain=None, path=None"

浏览器中明明存在PHPSESSID Cookie,求可行的解决思路。


解决思路

  • 先确认Cookie实际返回情况:
    不要直接通过键名取值,先打印所有Cookie内容,确认PHPSESSID是否真的被服务器返回:

    response = s.get(URL)
    print("返回的Cookie列表:", response.cookies.items())
    

    若确实无PHPSESSID,检查请求头是否合规,或是否需要先跳转至登录页面再获取会话Cookie。

  • 修正请求头拼写错误:
    代码中HEADERS的"orgin"是拼写错误,正确应为"Origin",该错误会导致服务器拒绝返回正确的会话标识或验证信息。

  • 区分SessionID与CSRF Token:
    PHPSESSID是会话ID,并非CSRF Token。Smartschool的CSRF Token通常嵌入在登录页面的HTML源码中(比如隐藏输入框login_form[_token]的值),需先请求登录页面,用BeautifulSoup等工具解析HTML提取该值,而非用PHPSESSID替代。

  • 动态获取_generationTime:
    代码中写死的1665576878是过期时间戳,需在请求登录页面时,从页面源码或响应数据中提取当前的_generationTime值,或使用当前时间戳(注意与服务器时区保持一致)。

  • 模拟浏览器完整访问流程:
    先请求首页,再跳转至登录页面,确保会话流程与浏览器完全一致——部分网站仅在用户访问登录页面时才生成有效会话Cookie。


内容的提问来源于stack exchange,提问作者Roel Bellemans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:50:24