如何用curl或wget下载需JavaScript登录的光伏系统状态页面HTML
核心思路:绕过前端JS,直接调用登录API
Enphase的登录逻辑是后端API验证,前端JS仅做表单封装,直接抓真实登录接口就能获取有效会话,无需依赖前端渲染或短期Cookie,可实现长期稳定的自动化抓取。
步骤1:抓包获取登录API细节
在浏览器中打开登录流程,打开开发者工具(F12)的网络标签,勾选「保留日志」,完成一次正常登录后,定位登录相关的POST请求,记录以下信息:
- 真实登录接口URL(例如
https://enlighten.enphaseenergy.com/login/login.json,以实际抓包结果为准) - 请求头的
Content-Type(通常为application/json或application/x-www-form-urlencoded) - 请求体格式(如JSON结构
{"email":"你的邮箱","password":"你的密码"})
步骤2:用curl实现登录+页面抓取
先发送登录请求保存会话Cookie,再用该Cookie请求目标页面:
# 1. 发送登录请求,将会话Cookie保存到cookie.txt curl -c cookie.txt -X POST \ -H "Content-Type: application/json" \ -d '{"email":"你的Enphase邮箱","password":"你的Enphase密码"}' \ https://enlighten.enphaseenergy.com/login/login.json # 2. 用保存的Cookie请求目标页面,输出到result.html curl -b cookie.txt https://enlighten.enphaseenergy.com/web/5000000/today/graph/hours > result.html
若抓包发现
Content-Type为application/x-www-form-urlencoded,请求体需改为email=你的邮箱&password=你的密码,同时调整-H的Content-Type值。
步骤3:用Python requests实现更稳定的自动化(推荐)
如果curl遇到CSRF Token或签名问题,用requests库可更灵活处理:
import requests # 配置参数 login_api = "https://enlighten.enphaseenergy.com/login/login.json" target_page = "https://enlighten.enphaseenergy.com/web/5000000/today/graph/hours" user_credentials = { "email": "你的Enphase邮箱", "password": "你的Enphase密码" } # 创建会话对象,自动管理Cookie session = requests.Session() # 执行登录 login_response = session.post(login_api, json=user_credentials) # 验证登录状态(可根据响应码或返回内容判断) if login_response.status_code == 200: # 请求目标页面 page_content = session.get(target_page).text # 保存HTML到本地文件 with open("solar_status.html", "w", encoding="utf-8") as f: f.write(page_content) else: print("登录失败,请检查凭证或API接口是否正确")
提示:若登录需要CSRF Token,先GET登录页面,从响应HTML或Cookie中提取
csrf_token,再将其加入登录请求的请求头或请求体。
关键注意事项
- 放弃浏览器导出的长期Cookie:Enphase的会话Cookie为短期有效,但每次通过API登录都能获取新的有效会话,脚本每次运行时重新登录即可长期稳定工作。
- 确保抓包的是真实登录请求:部分网站会有预登录请求(如获取验证Token),需完整抓取登录流程的所有必要步骤。
- 处理验证码风险:Enphase对常规用户登录通常不触发验证码,但若脚本频繁请求导致触发,需额外集成验证码识别服务。
内容的提问来源于stack exchange,提问作者emp-00
相关产品推荐
相关产品推荐

