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

使用Python Requests登录FPL网站失败,无法爬取能源仪表板数据

解决FPL网站登录爬取数据失败的问题

1. 抓准登录请求的真实参数

别自行猜测参数,直接通过浏览器开发者工具获取真实请求信息:

  • 打开F12进入「Network」标签,勾选「Preserve log」,手动完成一次登录流程
  • 定位到登录对应的POST请求,查看「Form Data」中的所有参数——除了emailOrUserId和pwd,通常还包含csrfToken、rememberMe这类隐藏字段,甚至可能有动态生成的专属token,这些参数必须全部包含在POST请求中
  • 注意参数格式细节,比如布尔值是true还是false,字符串是否有特殊编码

2. 用Session维持会话,避免Cookie丢失

requests的普通get/post不会自动保存Cookie,必须使用Session()对象贯穿整个请求流程:

import requests
from bs4 import BeautifulSoup

# 初始化会话,自动管理Cookie
session = requests.Session()

# 先访问登录页,获取必要的Cookie和Token
login_url = "https://www.fpl.com/my-account/login.html"
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"
}
login_page = session.get(login_url, headers=headers)
soup = BeautifulSoup(login_page.text, "html.parser")

# 提取CSRF Token(根据页面实际结构调整,可能在隐藏输入框或meta标签中)
csrf_token = soup.find("input", {"name": "csrfToken"})["value"]

# 构造完整登录参数,严格对应开发者工具中的Form Data
login_data = {
    "emailOrUserId": "你的用户名",
    "pwd": "你的密码",
    "csrfToken": csrf_token,
    "rememberMe": "false",
    # 补充所有从开发者工具中找到的其他参数
}

# 注意:登录请求的URL可能不是登录页面URL,而是实际处理认证的接口(如/api/login),需从开发者工具中获取真实地址
auth_url = "真实的登录接口URL"
session.post(auth_url, data=login_data, headers=headers)

# 登录后访问目标仪表盘
dashboard_url = "https://www.fpl.com/northwest/my-account/energy-dashboard"
dashboard_res = session.get(dashboard_url, headers=headers)
dashboard_soup = BeautifulSoup(dashboard_res.text, "html.parser")

# 查找目标表格
table = dashboard_soup.find("table", class_="v-datatable v-table theme--light")
print(table)

3. 补全请求头,避免被识别为爬虫

服务器会校验User-Agent、Referer等请求头字段,直接复制浏览器中的真实请求头即可,不要使用requests默认的请求头。

4. 排查其他安全验证机制

如果仍登录失败,大概率是以下原因:

  • 验证码拦截:若登录页存在reCAPTCHA等验证码,requests无法直接处理,需使用selenium、playwright等工具模拟浏览器登录
  • 动态内容渲染:目标表格由JavaScript动态加载,BeautifulSoup无法解析静态HTML中不存在的内容,需使用支持JS渲染的工具(如requests-html、playwright)
  • IP/频率限制:频繁请求导致IP被封禁,可添加几秒请求间隔,或使用代理IP
  • 额外动态参数:部分网站会在页面加载时生成专属验证token(如__RequestVerificationToken),必须从登录页HTML中提取后放入POST请求

5. 验证登录状态

登录后可打印dashboard_res.text,查看是否跳回登录页或包含错误提示;也可检查session中的Cookie,确认是否存在认证相关字段(如JSESSIONID、auth_token)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:17:38