使用Python一键完成健康打卡

'xxx,你怎么没打卡,你是不是睡过头了?哈哈哈'

'你还没打卡,快去打卡啊,在线等,急!'

'.............'

来源:本人博客

萌生想法

  疫情以来每天都要完成健康打卡,说来惭愧,有时候我真的就忘了,还要去监督别人。在上次用Python给钓鱼网站提交垃圾信息后,我就想着用Python来实现一键提交,然后再配合windos的计划任务,每天自动提交岂不是美滋滋。

  今天` 2020年4月11日 `(过了0点),我完成了适合自己的脚本。不出意外的话下一个零点我就可以一键上报了。

看看实验图:


这里显示`今天已经填报过了`是因为我主动提交了信息,目的是方便我抓数据。

一天只能提交一次实在不方便我抓数据,其实昨天有机会来着,被我浪费了。



发现问题

  但是有问题存在

 - 别人怎么用?

 - 怎么登陆?

这个时候就要提到`Cookie`了

???什么饼干

Cookie

简单地说,某网站能`'一周免登陆'`就是用到了Cookie

百度百科:

Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),`由用户客户端计算机暂时或永久保存的信息`。

我的想法是:要想大家都能用还需要登录抓取Cookie

`现在2020/4/11 1:35:06 睡觉啦,明天继续`


终于成功

现在`2020/4/12 3:26:23 `我们继续

经过辣么辣么久的尝试(刚入门Python),我终于成功啦

代码我会放在最后,因为现在水平不高,大佬勿喷啊

`记得安装result库:pip install result`


 - `https://app.nwafu.edu.cn/uc/wap/login/check`模拟登录,保存cookie

 - `https://app.nwafu.edu.cn/ncov/wap/default/save`再继续请求健康上报页面

健康上报页面的要提交的header包含很多信息,在浏览器抓到的数据中

 - `https://webapi.amap.com/maps/ipLocation`是获取经纬度的的请求地址

 - `https://restapi.amap.com/v3/geocode/regeo`是获取详细地址的请求地址

提交详细地址请求后会返回

```json

jsonp_703113_({"status":"1","regeocode":{"addressComponent":{"city":"某某地区","province":"新省","adcode":"行政区号","district":"县","towncode":"行政区号","streetNumber":{"number":"街道号","location":"经度,纬度","direction":"方向","distance":"34.3624","street":"街道"},"country":"国家","township":"镇","businessAreas":[[]],"building":{"name":[],"type":[]},"neighborhood":{"name":[],"type":[]},"citycode":"区号"},"formatted_address":"详细地址"},"info":"OK","infocode":"10000"})

```

在这里我将这串数据赋值给`city0`,然后用字符串切片截取数据

```python

city=city0[city0.index('"city":"')+8:city0.index('","province"')]

province=city0[city0.index('"province":"')+12:city0.index('","adcode"')]

district=city0[city0.index('district":"')+11:city0.index('","towncode"')]

adcode=city0[city0.index('"adcode":"')+10:city0.index('","district"')]

citycode=city0[city0.index('"citycode":"')+12:city0.index('"},"formatted_address":')]

```

然后放到`data`中

```python

data = {

  'tw': '7',

  'sfcxtz': '0',

  'sfjcbh': '0',

  'sfcxzysx': '0',

  'qksm': '',

  'sfyyjc': '0',

  'jcjgqr': '0',

  'remark': '',

  'address': address,

  'geo_api_info': geo_api_info,

  'area': area,

  'province': province,

  'city': city,

  'sfzx': '0',

  'sfjcwhry': '0',

  'sfjchbry': '0',

  'sfcyglq': '0',

  'gllx': '',

  'glksrq': '',

  'jcbhlx': '',

  'jcbhrq': '',

  'bztcyy': '1',

  'sftjhb': '0',

  'sftjwh': '0',

  'jcjg': '',

  'uid': '77567',

  'created': '1586448147',

  'date': '20200410',

  'jcqzrq': '',

  'sfjcqz': '',

  'szsqsfybl': '0',

  'sfsqhzjkk': '',

  'sqhzjkkys': '',

  'sfygtjzzfj': '0',

  'gtjzzfjsj': '',

  'id': '2551432',

  'gwszdd': '',

  'sfyqjzgc': '',

  'jrsfqzys': '',

  'jrsfqzfy': '',

  'ismoved': '0'

}

```

最后提交,大工告成

在全部代码的12行改好自己的学号密码,然后将这个脚本添加至计划任务就可以每天`自动打卡`了

不知道如何设置的可以参考:windows创建定时任务执行python脚本")

全部代码

```python

# !/usr/bin/env python

# -*- coding: utf-8 -*-

#请在12行补全账号密码

import urllib.request

import urllib.parse

#import urllib.errorss

import http.cookiejar

import requests

import time

LOGIN_URL = r'https://app.nwafu.edu.cn/uc/wap/login/check'  # 登录教务系统的URL,目的是获取cookie

get_url = 'https://app.nwafu.edu.cn/ncov/wap/default/save'  # 利用cookie请求打卡地址

values = {'username': '在这里输入学号', 'password': '在这里输入密码'}

postdata = urllib.parse.urlencode(values).encode()

############################################################################################################

headers3 = {

    'authority': 'webapi.amap.com',

    'pragma': 'no-cache',

    'cache-control': 'no-cache',

    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',

    'sec-fetch-dest': 'script',

    'accept': '*/*',

    'sec-fetch-site': 'cross-site',

    'sec-fetch-mode': 'no-cors',

    'referer': 'https://app.nwafu.edu.cn/ncov/wap/default/index',

    'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',

}

params3 = (

    ('key', '729923f88542d91590470f613adb27b5'),

    ('callback', 'jsonp_734125_'),

    ('platform', 'JS'),

    ('logversion', '2.0'),

    ('appname', 'https://app.nwafu.edu.cn/ncov/wap/default/index'),

    ('csid', '88DB2BE4-AEC3-47E1-909F-E08A63B3CF61'),

    ('sdkversion', '1.4.4'),

)

response = requests.get('https://webapi.amap.com/maps/ipLocation', headers=headers3, params=params3)

ipdz=response.text

jdd=ipdz[ipdz.index('"lat":"')+7:ipdz.index('"})')]

print('经度:',jdd,end='  ')

wdd=ipdz[ipdz.index('"lng":"')+7:ipdz.index('","lat"')]

print('纬度:',wdd)

#以上获取经纬度

############################################################################################################

headers1 = {

    'Connection': 'keep-alive',

    'Pragma': 'no-cache',

    'Cache-Control': 'no-cache',

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',

    'Sec-Fetch-Dest': 'script',

    'Accept': '*/*',

    'Sec-Fetch-Site': 'cross-site',

    'Sec-Fetch-Mode': 'no-cors',

    'Referer': 'https://app.nwafu.edu.cn/ncov/wap/default/index',

    'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',

}

params1 = (

    ('key', '729923f88542d91590470f613adb27b5'),

    ('s', 'rsv3'),

    ('language', 'undefined'),

    ('location', '75.86036,39.37025'),

    ('extensions', 'base'),

    ('callback', 'jsonp_703113_'),

    ('platform', 'JS'),

    ('logversion', '2.0'),

    ('appname', 'https://app.nwafu.edu.cn/ncov/wap/default/index'),

    ('csid', '090D6179-CE87-4E0C-8AA9-69B0B3E8FF8A'),

    ('sdkversion', '1.4.4'),

)

response1 = requests.get('https://restapi.amap.com/v3/geocode/regeo', headers=headers1, params=params1)

city0=response1.text

fa=city0[city0.index('ess":"')+6:city0.index('"},"info')]

print('位置:',fa)

#以上获取地址

city=city0[city0.index('"city":"')+8:city0.index('","province"')]

province=city0[city0.index('"province":"')+12:city0.index('","adcode"')]

district=city0[city0.index('district":"')+11:city0.index('","towncode"')]

adcode=city0[city0.index('"adcode":"')+10:city0.index('","district"')]

citycode=city0[city0.index('"citycode":"')+12:city0.index('"},"formatted_address":')]

print(city,end='  ')

print(province,end='  ')

print(district)

print("行政区划代码:",adcode)

print('区号:',citycode)

area=province+' '+city+' '+district

address=province+city+district

############################################################################################################

headers = {'authority': 'app.nwafu.edu.cn','pragma': 'no-cache','cache-control': 'no-cache','upgrade-insecure-requests': '1','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36','sec-fetch-dest': 'document','accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','sec-fetch-site': 'same-origin','sec-fetch-mode': 'navigate','referer': 'https://app.nwafu.edu.cn/site/applicationSquare/index?sid=8','accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',}

info0='{"type":"complete","info":"SUCCESS","status":1,"Eia":"jsonp_676131_","position":{"P":'

jd=jdd

wd=wdd

info3='},"message":"Get ipLocation success.Get address success.","location_type":"ip","accuracy":null,"isConverted":true,"addressComponent":{"citycode":'

ac='adcode":"'

info4='"businessAreas":[],"neighborhoodType":"","neighborhood":"","building":"","buildingType":"","street":"","streetNumber":"","province":"","city":"","district":"","township":""},"formattedAddress":'

info1=',"roads":[],"crosses":[],"pois":[]}'

d=','

info2=','

geo_api_info=info0+jd+d+'"O":'+wd+d+'"lng":'+wd+d+'"lat":'+jd+info3+'"'+citycode+'"'+d+'"'+ac+address+'"'+d+info4+fa+'"'+info1+info2

data = {

  'tw': '7',

  'sfcxtz': '0',

  'sfjcbh': '0',

  'sfcxzysx': '0',

  'qksm': '',

  'sfyyjc': '0',

  'jcjgqr': '0',

  'remark': '',

  'address': address,

  'geo_api_info': geo_api_info,

  'area': area,

  'province': province,

  'city': city,

  'sfzx': '0',

  'sfjcwhry': '0',

  'sfjchbry': '0',

  'sfcyglq': '0',

  'gllx': '',

  'glksrq': '',

  'jcbhlx': '',

  'jcbhrq': '',

  'bztcyy': '1',

  'sftjhb': '0',

  'sftjwh': '0',

  'jcjg': '',

  'uid': '77567',

  'created': '1586448147',

  'date': '20200410',

  'jcqzrq': '',

  'sfjcqz': '',

  'szsqsfybl': '0',

  'sfsqhzjkk': '',

  'sqhzjkkys': '',

  'sfygtjzzfj': '0',

  'gtjzzfjsj': '',

  'id': '2551432',

  'gwszdd': '',

  'sfyqjzgc': '',

  'jrsfqzys': '',

  'jrsfqzfy': '',

  'ismoved': '0'

}

cookie_filename = 'cookie_jar.txt'

cookie_jar = http.cookiejar.MozillaCookieJar(cookie_filename)

handler = urllib.request.HTTPCookieProcessor(cookie_jar)

opener = urllib.request.build_opener(handler)

request = urllib.request.Request(LOGIN_URL, postdata, headers)

try:

    response = opener.open(request)

    # print(response.read().decode())

except urllib.error.URLError as e:

    print(e.code, ':', e.reason)

cookie_jar.save(ignore_discard=True, ignore_expires=True)  # 保存cookie到cookie.txt中

print('*'*80)

print('cookie已经写.py文件同路径的“cookie_jar.txt”')

print('cookie信息:')

for item in cookie_jar:

    print('name=',item.name,end=' ')

    print('value=',item.value,end=' ')

print('')

print('*'*80)

data=urllib.parse.urlencode(data).encode()

get_request = urllib.request.Request(get_url, headers=headers,data=data)

get_response = opener.open(get_request)

final=get_response.read().decode()

if '成功' in final:

    pirnt("欧耶!上报完成")

    print('完成,程序3秒后退出')

    print('3')

    time.sleep(1)

    print('2')

    time.sleep(1)

    print('1')

    time.sleep(1)

    print('Bye bye  :)')

elif '已经填报' in final:

    print("今天已经填报过啦   )QWQ )")

    print('完成,程序3秒后退出')

    print('3')

    time.sleep(1)

    print('2')

    time.sleep(1)

    print('1')

    time.sleep(1)

    print('Be seeing you  :)')

elif '请输入' in final:

    print('发生错误,请检查账号密码,程序3秒后退出')

    print('3')

    time.sleep(1)

    print('2')

    time.sleep(1)

    print('1')

    time.sleep(1)

    print('Have a nice day   :(')

```


最终翻车

`2020/4/12 4:16:56 `

还未测试,今天会测试,个人感觉会翻车,建议不要使用,请持续关注,测试成功后可使用

`2020/4/12 11:00:19 `经测试,无法获取地理位置,原因可能是我没用储存的cookie请求定位

`2020/4/12 12:34:26 `我搞不定请求定位的了,没有达到预期效果,只有我自己能用,其他人如果想用就要去抓一下获取地址的请求。我已经加入了计划任务:


还得学好了再说啊,我把这破操作总结为:`萌新没学走路就开跑`,但也是一个学习的过程了。划入归档啦,byebye!

原文地址:使用Python一键完成健康打卡

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容