avatar

目录
Python3实现自动签到

背景

小机场每天只要签到能赠送流量,但是自己亲力亲为实在太累,用脚本来实现才是王道。赶紧补了好几小时的python视频。大佬就别笑话我了~~~

分析

基本分析

要实现每日自动签到,其实关键就两步,登录+签到。

这是登陆界面:

login.png

很简单,只需要账户+密码就能登陆了。

这是签到界面:

qiandao.png

点击就能成功了。

获取连接

如此通过浏览器 F12 或者右击进入开发者模式进到 NETWORK 选项下,进行抓包

getloginurl.png

在这里我们获取到了登录链接 https://ji-bc.pw/sigin 。在 Form Data 中,看到自己的登录邮箱以及登陆密码。这样要实现登录就很简单了,用 Post 方法将账户信息传到登陆链接就好了。

在签到页同样进行抓包

check_in.png

获得了签到用的链接 https://ji-bc.pw/user/checkin ,这里对其用 Post 就能完成了。

链接就获取完了

登录&签到

在python3中要实现 登录 + 签到 ,采用 python 第三方库 reqursts 是最轻松快捷的。

登录:

python
1
2
3
4
5
6
7
8
login_url = "https://ji-bc.pw/signin" # 登陆的链接
login_data = { # 这是
"email": mail, # 登录信息
"passwd": passwd # 包装在一个字典中
}
# 登录
login_session = requests.session() # 创建一个Session对象
res = login_session.post(url=login_url,data=login_data,headers=headers,verify=False) # 以POST 方式发送请求

签到:

python
1
checkin=login_session.post(url='https://ji-bc.pw/user/checkin',headers=headers,allow_redirects = False)

其实我们这个小脚本也可以说是一个小爬虫,所以要给它基本的尊重——伪装。

其实很简单,给它加一个 Headers 就好了。

python
1
2
3
4
5
6
7
headers = {
"User-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/82.0.4083.0 Safari/537.36",
"x-requested-with":"XMLHttpRequest",
"Sec-Fetch-Dest":"empty",
"Sec-Fetch-Mode":"cors",
"Sec-Fetch-Site":"same-origin"
} # 其实就是个字典,在抓包抓取地方摘过来的

如此就能完成签到了。

完成

基于分析可以写完了。

python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import requests

headers = {
"User-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/82.0.4083.0 Safari/537.36",
"x-requested-with":"XMLHttpRequest",
"Sec-Fetch-Dest":"empty",
"Sec-Fetch-Mode":"cors",
"Sec-Fetch-Site":"same-origin"
}

def login(mail,passwd):
login_url = "https://ji-bc.pw/signin"
login_data = {
"email": mail,
"passwd": passwd
}
# 登录
login_session = requests.session()
res = login_session.post(url=login_url,data=login_data,headers=headers,verify=False)
# 签到
checkin=login_session.post(url='https://ji-bc.pw/user/checkin',headers=headers,allow_redirects = False)

if __name__=="__main__":
data = {
'mail': 'XXXXX@126.com',
'passwd': 'XXXXXX'
}
login(data['mail'],data['passwd'])

但是这样就这样啥提示也没有,也显得的太没东西了(虽然本来也没什么东西)

继续看抓包结果,发现 https://ji-bc.pw/xiaoma/get_user 这个链接会返回一个 json 数据给我们,一翻看,我们的流量数据都在这里。

Inquery_data.png

这样我们 GET 下该链接,并对其返回值进行筛选输出不就好了

python
1
2
3
4
5
Inquire = login_session.get(url="https://ji-bc.pw/xiaoma/get_user",headers=headers)
print('过去使用流量:',simplejson.loads(Inquire.text)['data']['old'])
print('上次签到流量:',str(simplejson.loads(Inquire.text)['data']['old_flow'])+'MB')
print('今日已用流量:',simplejson.loads(Inquire.text)['data']['now'])
print('账户剩余流量:', simplejson.loads(Inquire.text)['data']['over'])

源代码

python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import requests
import simplejson
import time
headers = {
"User-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/82.0.4083.0 Safari/537.36",
"x-requested-with":"XMLHttpRequest",
"Sec-Fetch-Dest":"empty",
"Sec-Fetch-Mode":"cors",
"Sec-Fetch-Site":"same-origin"
}

def login(mail,passwd):
login_url = "https://ji-bc.pw/signin"
login_data = {
"email": mail,
"passwd": passwd
}

# 忽视verify = False的错误提示
requests.packages.urllib3.disable_warnings()
# 登录
login_session = requests.session()
res = login_session.post(url=login_url,data=login_data,headers=headers,verify=False)
print("用户 " + mail+ " " + (simplejson.loads(res.text)["msg"]).split('(')[0])
# 签到
checkin=login_session.post(url='https://ji-bc.pw/user/checkin',headers=headers,allow_redirects = False)
print(simplejson.loads(checkin.text)['msg'])
# 查询详细信息
Inquire = login_session.get(url="https://ji-bc.pw/xiaoma/get_user", headers=headers)
print('过去使用流量:',simplejson.loads(Inquire.text)['data']['old'])
print('上次签到流量:',str(simplejson.loads(Inquire.text)['data']['old_flow'])+'MB')
print('今日已用流量:',simplejson.loads(Inquire.text)['data']['now'])
print('账户剩余流量:', simplejson.loads(Inquire.text)['data']['over'])

if __name__=="__main__":
data = {
'mail': 'XXXXXXX@126.com',
'passwd': 'XXXXXXXXXXXX'
}
login(data['mail'],data['passwd'])
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
文章作者: 阿长啊
文章链接: https://www.52chang.wang/post/16912.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 长弓不是弓长
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论