青年大学习截图是怎么回事呢?青年大学习相信大家都很熟悉,但是青年大学习截图是怎么回事呢,下面就让小编带大家一起了解吧。青年大学习截图,其实就是完成青年大学习所截的图片,大家可能会很惊讶青年大学习怎么会截图呢?但事实就是这样,小编也感到非常惊讶。这就是关于青年大学习截图的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦!
公众号:青春山东
注:签到功能只适用山东地区;如果只想获取截图(任意地区皆可),直接执行即可,无需修改openid。
环境:Python3
所需第三方库:requests(没有的pip install requests安装一下就好)
主要功能
- 一键完成所有大学习
- 完成任意一期大学习
- 获得截图(可能会失败、但成功可能性极高)
使用方法
- 修改第11行的openid为自己的,获取方法后文会提及。(如果不指定openid则只能获取截图。)将获取到的openid替换掉给出的1234567890AbCdEfGhIj_KlMnOpQ即可。(28个字符)
- python qndxx.py执行即可完成签到和截图。
- 如果想要执行一键签到所有将115行autosign()前“#”去掉即可。
openid
什么是openid?
openid是微信用户在公众号appid下的唯一用户标识(appid不同,则获取到的openid就不同),可用于永久标记一个用户,同时也是微信JSAPI支付的必传参数。
如何获取?
- 抓包分析。这种方法略微麻烦就不说了。
- 访问特殊页面获取。
① 打开任意一期团课
② 进入我的学习日志
③ 复制链接得到的链接就包含了openid,即字符串中的”…openid=xxxxx&….”其中的xxxxx就是所需的openid。
复制到的链接大概这样http://qndxx.youth54.cn/SmartLA/lottery.w?method=openFxjm&openid=1234567890AbCdEfGhIj_KlMnOpQ
脚本(点我下载)
#!/usr/bin/python3 # -*- coding: utf-8 -*- ###公众号青春山东,需要修改openid import requests import time import re import json import os global openid, ua, xm, sjhm, dw, tzb, zzbh openid = "1234567890AbCdEfGhIj_KlMnOpQ" #微信openid,系统判别方式 ua = "Mozilla/5.0 (Linux; Android 9; QNDXX 666 Pro Build/PKQ1.180917.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045111 Mobile Safari/537.36 MMWEBID/3667 MicroMessenger/7.0.14.1660(0x27000E37) Process/tools NetType/4G Language/zh_CN ABI/arm64 WeChat/arm64" #模拟微信UA root_url = "http://qndxx.youth54.cn" #根地址 #save_url = "/SmartLA/lottery.w?method=saveUser" #保存地址,即签到地址 record_url = "/SmartLA/lottery.w?method=openFxjm&openid=" + openid #学习记录地址 userinfo_url = "/SmartLA/lottery.w?method=enterUpdateUserInfo&openid=" + openid #用户信息获取地址 nvi_url = "/SmartLA/dxxjfgl.w?method=getNewestVersionInfo&openid=" + openid #获取最新大学习信息 sign_url = "/SmartLA/dxxjfgl.w?method=studyLatest" #签到地址 ubi_url = "/SmartLA/dxxjfgl.w?method=getUserBasicInfo&openid=" + openid #获取用户信息 s = requests.Session() #建立会话 ###尝试获取用户信息,不检验openid是否合法 def getuserinfo(): try: r = s.post(root_url + userinfo_url,data = "", headers = {"User-Agent": ua}) res1 = re.findall(": (.*?),",r.text) #筛选信息,正则表达式出现了点问题,无法正确匹配... for i in range(0,len(res1)): #暴力匹配 if res1[i][1:-1] == openid: break xm = res1[i + 1][1:-1] #姓名 sjhm = res1[i + 2][1:-1] #手机号码 dw = res1[i + 3][1:-1] #地区 tzb = res1[i + 4][1:-1] #团组织 zzbh = res1[i + 5][1:-1] #组织编号,团组织对应的编号,每个团组织都不一样 return xm, sjhm, dw, tzb, zzbh except: print("获取失败!") ###获取最新大学习期数和地址 def versions(): r = s.post(root_url + nvi_url,data = "", headers = {"User-Agent": ua}) version = r.json()['version'] url = r.json()['url'] return version, url ##签到 def sign(version = '9-b'): #签到最新一期,书写方式例如"7-7" headers = { "User-Agent" : ua, "X-Requested-With": "XMLHttpRequest", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" } data = { "openid": openid, "version":version } r = s.post(root_url + sign_url, data = data, headers = headers) print(r.json()) return r.json() ##学习记录 def record(): r = s.get(root_url + record_url,data = "", headers = {"User-Agent": ua}) res = re.findall("var canshu=(.*?);",r.text)[0][1:-1] #筛选信息 res = json.dumps(json.loads(res), sort_keys=True, indent=4, separators=(',', ':')) #转成字典、文本化 res = eval(repr(res).replace('\\\\', '\\')) #将"\\"替换成"\",解决直接打印unicode print(res) #输出结果 ##获取用户信息 def getubi(): r = s.get(root_url + ubi_url,data = "", headers = {"User-Agent": ua}) res = json.dumps(r.json(), sort_keys=True, indent=4, separators=(',', ':')) #转成字典、文本化 res = eval(repr(res).replace('\\\\', '\\')) #将"\\"替换成"\",解决直接打印unicode print(res) #输出结果 ##获取截图地址,需要自行测试是否为截图,适用于大多数情况。url为sign()签到后的返回值。 def endjpg(url,v = 'end'): try: for i in range(len(url) - 1, -1, -1): #寻找最后一次出现字符'/'时的位置 if url[i] == '/': break end_url = url[0:i] + "/images/end.jpg" #构建一个简单截图链接 try: r = s.get(end_url, data = "", headers = {"User-Agent": ua}) if r.status_code == 200: open('./'+ v + '.jpg','wb').write(r.content) print(v + '.jpg\t' + end_url) else: print("截图链接无效,请手动获取截图!") except: print("保存失败!") return end_url except: return "未知错误!" if __name__ == "__main__": print(time.strftime("[%Y/%m/%d %H:%M:%S]\t"), end = '') version, url = versions() if version == '10-4-1': print("截图"+ version +"需要手动获取!") exit(0) if os.path.exists('./'+ version + '.jpg'): print("截图"+ version +".jpg已存在!") exit(0) sign(version) endjpg(url,version) #获取最新一期截图地址
最后,还是希望大家能够抽出时间来认真大学习!