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

如何用Python编写程序测试Battle.net登录接口的Post请求方法

实现Battle.net中国区登录的Python脚本

嘿,我来帮你完善这个登录脚本!Battle.net的登录接口有反爬机制,直接POST账号密码肯定行不通,得先处理CSRF令牌和会话Cookie,下面是完整的实现方案:

关键前提说明

Battle.net的登录流程不是简单的POST账号密码就完事,需要注意这几点:

  • 必须先访问登录页面获取CSRF令牌,否则POST请求会被拒绝
  • 要模拟真实浏览器的请求头,避免被反爬拦截
  • 登录成功后,需要把会话Cookie同步给浏览器,才能打开已登录状态的目标页面

完整代码实现

import requests
import webbrowser
import tempfile
import os
from bs4 import BeautifulSoup

# 配置信息:替换成你的实际账号密码
ACCOUNT_NAME = "<your_account_name>"
PASSWORD = "<your_password>"

# 页面URL
LOGIN_PAGE_URL = "https://www.battlenet.com.cn/login/zh/?ref=https://www.battlenet.com.cn/wow/zh/vault/character/auction/index&app=com-wow"
TARGET_PAGE_URL = "https://www.battlenet.com.cn/wow/zh/vault/character/auction/index"

def main():
    # 1. 创建会话对象,自动管理Cookie
    session = requests.Session()
    
    # 模拟Chrome浏览器的请求头
    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",
        "Referer": LOGIN_PAGE_URL
    }

    # 2. 访问登录页面,获取CSRF令牌
    print("正在获取登录页面信息...")
    login_page_response = session.get(LOGIN_PAGE_URL, headers=headers)
    soup = BeautifulSoup(login_page_response.text, "html.parser")
    
    # 提取页面中的CSRF令牌(不同时期可能会变,若找不到可检查页面源码的input标签)
    csrf_token = soup.find("input", {"name": "csrfToken"})["value"]
    print(f"获取到CSRF令牌: {csrf_token[:10]}...")

    # 3. 构造登录请求参数
    login_payload = {
        "accountName": ACCOUNT_NAME,
        "password": PASSWORD,
        "csrfToken": csrf_token,
        "app": "com-wow",
        "ref": "https://www.battlenet.com.cn/wow/zh/vault/character/auction/index"
    }

    # 4. 发送登录请求
    print("正在尝试登录...")
    login_response = session.post(
        LOGIN_PAGE_URL,
        data=login_payload,
        headers=headers,
        allow_redirects=True  # 自动处理登录后的重定向
    )

    # 5. 验证登录结果
    if TARGET_PAGE_URL in login_response.url:
        print("登录成功!正在打开目标页面...")
        # 把Session的Cookie导出成浏览器可识别的Netscape格式
        with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.txt') as cookie_file:
            for cookie in session.cookies:
                cookie_file.write(
                    f"{cookie.domain}\tTRUE\t{cookie.path}\tFALSE\t{cookie.expires}\t{cookie.name}\t{cookie.value}\n"
                )
        
        # 用Chrome打开目标页面并加载Cookie(需关闭所有Chrome窗口再运行)
        chrome_cmd = f'"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" --user-data-dir={tempfile.gettempdir()} --cookie-file={cookie_file.name} {TARGET_PAGE_URL}'
        os.system(chrome_cmd)
        
        # 可选:登录完成后删除临时Cookie文件
        # os.unlink(cookie_file.name)
    else:
        print("登录失败!请检查账号密码是否正确,或是否需要验证码/二次验证。")

if __name__ == "__main__":
    main()

重要注意事项

  • CSRF令牌定位:如果代码运行时找不到csrfToken,可以手动打开登录页面查看源码,找到实际的令牌字段名(可能会有变动)
  • 浏览器Cookie同步:上面用的是Chrome的启动参数,如果你用Firefox等其他浏览器,需要调整Cookie加载的方式
  • 反爬与验证:如果遇到验证码或手机/邮箱二次验证,脚本需要额外处理(比如手动输入验证码,或者调用验证码识别服务)
  • 账号安全:不要把账号密码硬编码在代码里,建议用环境变量或加密配置文件读取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:42:06