吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1357|回复: 9
收起左侧

[Python 原创] 武汉商学院电费查询脚本

  [复制链接]
kodesu 发表于 2024-3-15 18:46
本帖最后由 kodesu 于 2024-3-16 08:55 编辑

wbu_power_message_push

武汉商学院电费查询


简介

也没啥好说的,就是突发奇想爬了下交电费的网页,企业微信缴费还得复制到微信上调用微信的支付Api,一堆新生电费都不知道怎么交!,而且没电费了也没啥提醒
PS:目前版本只支持北区查询,具体原因看下面原理

原理

Step 1

分析链接传参

image.png

http://yktyd.wbu.edu.cn/wechat/elecpay/queryelec.html
?
json=PsawsniNuAsphjoIwdJTVW%252BKBRQ1A4RVpp1BYcPWhTgZg%252BDxDkRlnEvwxDJQk81qzvX6JH7LRf6Q%250D%250AXBtpgI2dRCJlQZgGkpSXM8mcggc4PpX9FzSFCYa%252BeuZ3dkJDAhKRufQQem3czCkpHxdk9EsWJMq9%250D%250AqqJ0nflhNtCCvYSWcSk%253D%250D%250A
&
token=wWC46I31LgDeBN%252B%252B5gSh%252FA%253D%253D%250D%250A
&
xxbh=synjones
&
jkbh=0014

可以看到充电费的页面传递了四个参数,其他三个都一样,最重要的是token,用于OAuth身份验证,经过测试。这个token时效是有限的,并且该页面在token有效期内是可以通过其他UA进行访问的。token过期则意味着之后打开构造的链接就会显示从微信客户端打开页面的提示,并且进行伪造微信UA,进入页面也会发现页面不传递任何信息。所以我们不能依赖于token来构建这个链接进行自动化爬虫工作。但是经过抓包有有了新的发现。

Step 2

填写表单分析HTTP请求

image.png
image.png
填写表单后,浏览器抓包发现响应了一个Http请求,那么,我们是不是可以直接构建一个链接去请求这个api呢?答案是可以的,并且可以不经过token的验证,那么事情就好办了。我们直接构建如下链接访问。

https://yktyd.wbu.edu.cn/wechat/basicQuery/queryElecRoomInfo.html?aid=0030000000001401&area=%7B%22area%22%3A%22%22%2C%22areaname%22%3A%22%22%7D&building=%7B%22building%22%3A%22%E8%A7%82%E6%B9%96%E8%8B%915%E6%A0%8B%22%2C%22buildingid%22%3A%2240%22%7D&floor=%7B%22floorid%22%3A%22%22%2C%22floor%22%3A%22%22%7D&room=%7B%22room%22%3A%22%22%2C%22roomid%22%3A%22520%22%7D

image.png
发现可以直接返回一个字典,那么事情就简单了,只需要构建一个requests请求就可以轻松查询到余额了。

Step 3

构建requests请求

首先我们先用encodeURIComponent解密这个url,如下

http://yktyd.wbu.edu.cn/wechat/basicQuery/queryElecRoomInfo.html
?
aid=0030000000001401
&
area={"area":"","areaname":""}
&
building={"building":"观湖苑5栋","buildingid":"40"}
&
floor={"floorid":"","floor":""}
&
room={"room":"","roomid":"520"}

其中有几个重要的参数,北区查询时,只需要替换这两个参数就可以查询到字典,其他参数就算不一致也可以忽视。比如buildingid

"building":"观湖苑5栋"
"roomid":"520"

那么我们就构建GET请求过去就好了,但是事情没这么简单,经过测试,只有北区才能只使用这两个参数去构建GET请求,并且成功获得字典,南区需要重新构建aidbuildingidflooridfloorroomroomid这些参数,参数过于繁杂,而且命名不规范,而且本人也不在南区,所以南区的适配计划暂时搁置,如果有人意愿适配南区的话,只需要跟着原理构建相对的请求即可适配。

经过构造的URL,我们直接去请求发现无法查询,显示会话已超时,请尝试重新访问业务应用,其实这个api认证的方式是一个cookies,构造这个请求还需要手动提取出一份可用的cookies,我们可以通过浏览器抓取。如下图
image.png

image.png

Cookies具体抓取方法
  1. 进入企业微信打开校园一卡通界面
    image.png

  2. 打开缴电费页面

  3. 点击左上角三个点,选择复制链接

  4. 把链接复制到电脑上,使用Chrome打开

  5. 打开后按F12进入开发者模式,选择应用-存储-Cookie-http://yktyd.wbu.edu.cn就可以看到对应的Cookies

  6. 获取到JSESSIONID的值填入config.yaml对应位置即可
    image.png

功能列表

功能 描述
查电费 构建GET请求查询API
电费记录 使用.power.yaml记录每次查询的电费并且对比
企业微信推送 电费信息通过企业微信推送
断电提醒 每次电费快用完时会提醒用户
自动抓包 自动抓取cookies
adb自动运行 自动运行企业微信进行抓包
docker部署 提供打包了运行环境的镜像

快速开始-自动

  • 你需要事先安装Docker
  • 你需要一台没有密码的安卓手机, 安装好企业微信并且登录,开启开发者选项-USB调试
  • 本次使用的系统为Debian Arm64
  • 运行在Docker环境中
  • 注意,请确保 8080 端口没有被使用

  1. 在手机上打开开发者选项-USB调试指针位置
  2. 手动打开一次企业微信,记录企业微信主页面的工作台x,y坐标,然后点击工作台,记录工作台页面的校园一卡通x,y坐标
  3. 记录运行的ip地址
  4. 创建文件夹,保存程序运行的logs与配置
mkdir power && cd power
  1. 创建配置文件,并且填写相关配置
touch config.yaml && touch .power.yaml
vim config.yaml
WBUPower:  
  Corp_id: 企业微信 Corp_id  
  Corp_secret: 企业微信 Corp_secret  
  Agentid: 企业微信 Agentid  
  Building: 观湖苑X栋  
  Roomid: 房间号,例如222  
  adbinputone: adb shell input tap 工作台x轴坐标 工作台y轴坐标 
  adbinputtwo: adb shell input tap 校园一卡通x轴坐标 校园一卡通y轴坐标  
  hostip: 填运行脚本主机的ip,请确保主机与手机可以通讯  
  Cookies:  
    JSESSIONID: 这里不用填,留空自动获取
  1. 连接手机在电脑或者其他设备上,运行Docker镜像

X86

docker run -itd \  
    --privileged \  
    --network bridge \  
    --rm \  
    --name power \  
    -p 8080:8080 \  
    -v "$(pwd)"/config.yaml:/app/config.yaml \  
    -v "$(pwd)"/.power.yaml:/app/.power.yaml \  
    -v "$(pwd)"/adb_logs:/app/adb_logs \  
    -v "$(pwd)"/main_logs:/app/main_logs \  
    -v "$(pwd)"/proxy_logs:/app/proxy_logs \  
    -v "$(pwd)"/keys:/root/.android \  
    fushin/wbupowerapi:1.1

Arm64

docker run -itd \  
    --privileged \  
    --network bridge \  
    --rm \  
    --name power \  
    -p 8080:8080 \  
    -v "$(pwd)"/config.yaml:/app/config.yaml \  
    -v "$(pwd)"/.power.yaml:/app/.power.yaml \  
    -v "$(pwd)"/adb_logs:/app/adb_logs \  
    -v "$(pwd)"/main_logs:/app/main_logs \  
    -v "$(pwd)"/proxy_logs:/app/proxy_logs \  
    -v "$(pwd)"/keys:/root/.android \  
    fushin/wbupowerapi:1.1-arm64
  1. 挂载自动任务,快速开始-手动一致,命令替换成sh run-XXX.sh,XXX是架构名,使用run.sh之前首先先编辑脚本设置启动位置

快速开始-手动

你需要事先安装python3.10
本文使用的系统为Debian,Windows系统请使用计划任务运行即可

  1. 下载源码并解压(假设当前路径为/root)
mkdir wbupower & cd wbupower
wget https://github.com/Xingsandesu/wbu_power_message_push/archive/refs/tags/1.0.zip
unzip main.zip
cd wbu_power_message_push-main
  1. 安装依赖
pip install -r requirements.txt
  1. 第一次运行生成config.yaml并配置
python main.py
  1. 修改config.yaml
vim config.yaml
  1. 试运行一次,确保配置可以运行
python main.py
  1. 挂载自动任务(每天早上八点自动运行)
crontab -e
0 8 * * * python /root/wbupower/wbu_power_message_push-main/main.py
  1. 完成

效果展示

image.png

image.png

相关依赖

见 requirements.txt


#源码
wbu_power_message_push-main.zip (25.93 KB, 下载次数: 0)

免费评分

参与人数 4吾爱币 +10 热心值 +4 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
s3nake + 1 + 1 我很赞同!
LLLYH + 1 我很赞同!
languor + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

爱飞的猫 发表于 2024-3-15 19:10
排版乱了哦。

连续的两个 ``` 代码段之间需要添加额外的空行。
lanbaiyuwen 发表于 2024-3-15 21:33
Enriqueme 发表于 2024-3-15 23:24
Iverson126 发表于 2024-3-16 00:53
作者的实力很厉害
Corgibro 发表于 2024-3-16 08:00
有意思,你的同学又方便了
qqpoly 发表于 2024-3-16 08:26
感觉好强大啊,就是排版有点乱啊
Kls673M 发表于 2024-3-16 08:49
图都没了, LZ用外链了?
 楼主| kodesu 发表于 2024-3-16 08:56
爱飞的猫 发表于 2024-3-15 19:10
排版乱了哦。

连续的两个 ``` 代码段之间需要添加额外的空行。

已经修改,谢谢指出
 楼主| kodesu 发表于 2024-3-16 08:57
lanbaiyuwen 发表于 2024-3-15 21:33
能不能更一下其他学校的?我还真有点好奇了

得看其他学校的系统了,每个学校系统都不一样
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表