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

使用Python POST请求无法登录https://admin.raptor.software网站

问题描述

尝试用Python发送POST请求登录https://admin.raptor.software,但登录失败。使用的代码片段如下:

import requests_html

session = requests_html.HTMLSession()

r = session.get('https://admin.raptor.software')
csrf = r.html.xpath('/html/head/meta[4]')[0].attrs['content']

data = {
    'client_id': '2',
    'client_secret': csrf,
    'grant_type': 'password',
    'password': 'MYPASSWORD',
    'username': 'MYEMAIL'
}
session.post('https://admin.raptor.software/api/login', data = data)

为了携带csrf参数,用requests_html库获取它。登录成功后,执行以下代码期望打印仪表盘HTML:

r = session.get('https://admin.raptor.software/dashboard')
print(r.text)

但返回的却是登录页面的HTML:

<!doctype html>
<html lang="de">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1,user-scalable=0">
        <meta name="csrf-token" content="eFC7HQfM9NJdi8u1nxQjDubUNjLLjVrmVmM1T4mD">
        <link href="/css/app.css?id=39d4a60bbe483994f0ec" rel="stylesheet">
        <title>Admin</title>

        <!-- Fonts -->
        <link rel="dns-prefetch" href="//fonts.gstatic.com">
        <link rel="preconnect" href="https://fonts.gstatic.com">
        <link href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">

        <!-- Styles -->
        <link href="https://admin.raptor.software/css/app.css" rel="stylesheet">
        <link href="https://admin.raptor.software/css/modules.css" rel="stylesheet">
        <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
    </head>
    <body>
        <div id="app">
            
        </div>
        
        <script src="/js/app.js?id=3f08b75b370e0e33ea8b"></script>
        <script src="/js/modules.js?id=65903b83a0bc6fc9f233"></script>
    </body>
</html>
解决思路与修复方案

1. 先确认登录请求的实际结果

你当前未处理POST登录请求的响应,无法确定登录是否真的发起成功。修改代码打印响应状态码和内容,直接排查登录失败的原因:

login_response = session.post('https://admin.raptor.software/api/login', data=data)
print(login_response.status_code)
print(login_response.text)

如果返回401、403等状态码,说明认证参数有误;如果返回JSON错误信息,能直接定位问题点。

2. 精准获取CSRF Token

用固定索引/html/head/meta[4]获取CSRF Token,一旦页面meta标签顺序变动就会出错。建议通过name属性精准定位:

csrf = r.html.xpath('//meta[@name="csrf-token"]')[0].attrs['content']

这样不管meta标签位置如何变化,都能正确拿到CSRF Token。

3. 补充必要的请求头

部分网站会验证请求头的Content-Type、Referer等字段,尝试在POST请求中添加:

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Referer': 'https://admin.raptor.software'
}
login_response = session.post('https://admin.raptor.software/api/login', data=data, headers=headers)

4. 核对登录接口的参数名

检查client_id、client_secret等参数名是否正确。有些OAuth2登录接口中,CSRF Token可能放在_token或csrf_token字段,而非client_secret。可以通过浏览器F12网络面板查看真实登录请求的Form Data,对比你代码中的参数是否一致。

5. 处理动态渲染的页面

从返回的登录页面HTML看,div id="app"内容为空,说明页面依赖JavaScript渲染。如果登录后需要加载动态内容,需用requests_html的render()方法执行页面JS:

r = session.get('https://admin.raptor.software/dashboard')
r.html.render()  # 执行页面JavaScript
print(r.html.html)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:33:25