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

Python发送POST登录请求时如何获取location.hash赋值的anchor参数值

anchor参数处理方案

anchor参数的值对应浏览器地址栏中#符号之后的内容(即JS中的location.hash),该参数的作用是控制登录成功后的跳转锚点位置,不属于登录校验的必填参数:

  • 如果你没有指定跳转路径的需求,直接传空字符串即可,不会影响登录结果
  • 如果你抓包获取到自己浏览器登录时anchor有固定值,直接将对应值填入POST参数即可
    requests库本身不会执行页面JS逻辑,也不需要额外解析JS来获取该参数,直接按需求赋值即可。

verify=False是否会导致登录失败

不会。verify=False仅关闭SSL证书合法性校验,只会触发控制台告警,不会导致请求被服务端拒绝,登录失败与该参数无关。

现有代码核心问题及修正

你当前登录失败的核心原因是请求上下文管理错误,另外还有2处可优化点:

  1. 已经初始化了requests.Session()对象,但发送POST请求时没有复用该对象,而是直接调用requests.post,导致之前GET请求获取的会话Cookie、上下文完全丢失
  2. 使用IP地址访问站点,多数站点会做域名校验,IP访问可能被拦截,建议替换为正式域名访问
  3. 不需要手动提取Cookie传给POST请求,Session对象会自动管理上下文Cookie

修正后的代码

import requests
from bs4 import BeautifulSoup as bb
import urllib3
# 关闭verify=False触发的SSL告警
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

# 替换为站点域名地址
url = "https://elearning.yu.edu.jo/login/index.php"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69',
    'Referer': 'https://elearning.yu.edu.jo/login/index.php'
} 
# 全程复用同一个Session对象
s = requests.Session()
# 请求登录页
get_resp = s.get(url, headers=headers, verify=False)
# 提取logintoken
soup = bb(get_resp.text, "html.parser")
logintoken = soup.find("input", attrs={'name': 'logintoken'})['value']
# 构造POST参数
post_data = {
    'username': '替换为你的用户名',
    'password': '替换为你的密码',
    'logintoken': logintoken,
    'anchor': ''
}
# 用同一个Session发送POST请求
post_resp = s.post(url, data=post_data, verify=False, headers=headers)
if "Dashboard" in post_resp.text:
    print('登录成功')
else:
    # 登录失败时打印前500个字符排查问题
    print('登录失败,返回预览:', post_resp.text[:500])

内容的提问来源于stack exchange,提问作者عبدالرحمن الشماس

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:45:04