吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2784|回复: 7
收起左侧

[Python 转载] 书接上文,利用requests包来实现疫情期间的“学校签到”

[复制链接]
hj170520 发表于 2020-5-4 20:56
本帖最后由 hj170520 于 2020-5-11 16:28 编辑

书接上文,https://www.52pojie.cn/thread-1171440-1-1.html

早上用的selenium包来完成的自动签到,下午看来有些大佬说request做很快。我还要感谢我的一位学JAVA的同学,尽管他也不太懂python,但是他还是在关键的地方帮到我了 。我是做出来了,但我花了一下午

我是小白,啥也不懂,requests的原理也不懂,逛知乎看了个答案觉得很好 https://www.zhihu.com/question/21471960/answer/100866141
9db523a541cf82597ea91175d3ee9b1d_1440w.jpg (借用的图)
原理就:上传了几个参数到服务器
一个是 first =true, 一个是kd = android, (关键字) 一个是pn =1 (page number 页码)
构造一个数据包来模拟用户的点击动作。
[Python] 纯文本查看 复制代码
post_data = {'first':'true','kd':'Android','pn':'1'}

然后使用python中库中最简单的requests库来提交数据。 而这些数据 正是抓包里看到的数据。
[Python] 纯文本查看 复制代码
import requests
return_data=requests.post("http://www.lagou.com/jobs/posi ... ot%3B,data=post_data)
print return_data.text

返回来的json数据,再对它进行处理

我靠,到这一步我有点懂了,就是我假装隔壁老王到隔壁家去做羞羞的事
所以,我该提交什么数据呢?我看这个熟悉的POST,我好像在哪见过。Fiddle免流见过,
然后我打开了我的Charles
打开我们上午的网页http://*********/dailyReportAllZ/#/?PersonID=+学号 (学号我就不提供了。我不,能出卖同学

按顺序看了一下“提交”和“返回”的数据。顺序依次是getMD5, getinfo, submit

getMD5

getMD5

getinfo

getinfo

submit

submit

然后我发现了规律,需从getMD5getinfo最后到submit
因为getMD5返回的"data" = "md5"(出现在getinfo)最后getinfo出现在了submit发送框里


所以我开始写代码了。 我直接把代码放出来把

[Python] 纯文本查看 复制代码
import json
import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15'
}

url_MD5 = "*********"
url_info = "*********"
url_submit = '*********'

cardId = input('你的学号:')

my_data = {"cardId": cardId}

res_MD5 = requests.request("post", url_MD5, headers = headers, data = my_data).text #取到了对方发回来的json文件
res_MD_dict = json.loads(res_MD5) #loads:把json转换为dict 便于把数据单独取出来
MD5 = res_MD_dict["data"]
my_data["md5"] = MD5


res_info = requests.request("post", url_info, headers = headers, data = my_data).text
res_info_dict = json.loads(res_info) #loads:把json转换为dict 便于把数据单独取出来
# print(res_info_dict) 检测出json.loads输出的空值为null
list = res_info_dict["data"]["list"] #层层剥开,名字要对准 输出的文件格式是"list"
# print(list) 检测出转化后的null变成了none
list_dict = dict(list[0]) # list输出之后转dict,这一步很关键,费了不少时间

data_submit = {}
data_submit["bh"] = list_dict["bh"]
data_submit["xykh"] = list_dict["xykh"]
data_submit["twfw"] = list_dict["twfw"]
data_submit["sfzx"] = list_dict["sfzx"]
data_submit["sfgl"] = list_dict["sfgl"]
data_submit["szsf"] = list_dict["szsf"]
data_submit["szds"] = list_dict["szds"]
data_submit["szxq"] = list_dict["szxq"]
data_submit["sfcg"] = list_dict["sfcg"]
data_submit["bllb"] = list_dict["bllb"]
data_submit["sfjctr"] = list_dict["sfjctr"]
data_submit["sbr"] = list_dict["sbr"]
data_submit["sjd"] = 0

# for keys in list_dict:
#     my_data[keys] = list_dict[keys] #想做去除none的循环,最后发现不会。。。。。

# for values in my_data.values():
#    if  values == None:
#        values = [0]

res_submit = requests.request("post", url_submit, headers = headers, data = data_submit).text
print(res_submit)


我说实话,我最后把my_data这个dict把所有变量发送出去返回来是失败的,最后从my_data把需要的几个变量拿出来发送就成功了。我很奇怪。
大佬帮忙作个解释吗? 以及有需要改进的地方,你们直说,我太需要被你们批评了。

免费评分

参与人数 1热心值 +1 收起 理由
羊毛丶 + 1 用心讨论,共获提升!

查看全部评分

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

lntuer 发表于 2020-5-4 21:16
一、不是动态参数的,例如data_submit["twfw"] = list_dict["twfw"],你可以写成data_submit["twfw"] =“0”
二、requests.request("post", url_MD5, headers = headers, data = my_data).text,写成这样不香吗?requests.post(url_MD5, headers = headers, data = my_data).text
 楼主| hj170520 发表于 2020-5-4 21:05
QQ20200504-210201@2x.png QQ20200504-210230@2x.png


第一个图是抓包返回来的值,第二个是我试了千万遍,发现只需要提交这几个变量就行了
但是我如果把从getinfo的变量都上传上去,就返回错误

还希望大佬们解释一下。
 楼主| hj170520 发表于 2020-5-4 21:18
lntuer 发表于 2020-5-4 21:16
一、不是动态参数的,例如data_submit["twfw"] = list_dict["twfw"],你可以写成data_submit["twfw"] =“0 ...

啊哈!动态参数,我第一次遇到这个词!多谢。
第二个就是 我开始是写的后面的那一个,但是报错。所以我试了半天,用前面的那一个居然成功了。我不知道问题出在哪,我的是python3.7
 楼主| hj170520 发表于 2020-5-4 21:22
lntuer 发表于 2020-5-4 21:16
一、不是动态参数的,例如data_submit["twfw"] = list_dict["twfw"],你可以写成data_submit["twfw"] =“0 ...

饿,我好像错了。
我估计打错代码了。刚才又去测试了一下。您说的办法可行。
谢谢
 楼主| hj170520 发表于 2020-5-5 09:05
想趁人打铁,玩个爬虫。
先研究大佬们的代码吧
雷晨 发表于 2020-12-10 17:48
大佬这么厉害吗,python都没有学直接从模块入手了
 楼主| hj170520 发表于 2020-12-11 09:53
雷晨 发表于 2020-12-10 17:48
大佬这么厉害吗,python都没有学直接从模块入手了

????
我只是看着别人怎么写,然后弄懂每行代码的意思。
然后就套公式一样地用,就行了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-17 09:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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