使用python实现微信小程序自动签到功能
作者:神笔小新 发布时间:2021-05-30 10:04:11
功能描述目标
完成多账号微信小程序每天自动签到
输出
签到成功则向微信群发送签到成功的信息
否则提示用户签到失败,需手动签到
包管理
requests
itchat
time
threading
程序的结构设计步骤1
获取要发送的json数据:地址
步骤2
向服务器发送请求
步骤3
根据服服务器响应判断签到是否完成
步骤4
微信交互
代码实现使用findler抓包工具查看请求类型
https://reserve.25team.com/wxappv1/yi/index?version=13
可以看到,该小程序使用的是https,因此可以使用python爬虫来实现模拟用户签到的功能
我们先对该url发送一次请求,查看服务器返回的内容
import requests
def request_h(url):
headers = {
"Accept-Encoding": "gzip, deflate, br",
"User-Agent": "Mozilla / 5.0",
"content-type": "application / json",
"Referer": "https: // servicewechat.com / wxd2bebfc67ee4a7eb / 45 / page - frame.html",
# 设置token
"token": "可以再findler请求栏查看自己的token",
"Connection": "keep - alive",
"Host": "reserve.25team.com"
}
r = requests.get(url, headers=headers, json=json)
return r
if __name__ == '__main__':
url = "https://reserve.25team.com/wxappv1/yi/addReport"
res = request_h(url)
print(res.text)
在代码当中,最主要的部分是请求头的设置,其中token尤为重要,它是服务器检验用户身份的一个重要手段,当然它的功能不仅于此
什么是token
请求发出后,服务器返回内容是一个json数据,我们在小程序中所看到的内容就是由这些json数据组成的,我们在实现签到功能的时候,也是由客户端向服务器发送一段json数据,我们先来看看我们要发送的json数据的结构
再次使用findler抓包,查看请求内容
https:reserve.25team.com/wxappv1/y1/adReport
当我们点击信息上报的时候,实际上就是向上面的网站发送了一段json数据,具体内容如下
我们可以看到,客户端是使用post请求发送数据的,在findler中点击请求栏上面的JSON,就可以看到我们所发送的JSON数据,如下:
# json = {"content":{"0":"否","1":"","2":"","3":"","4":"","5":"否","6":"否","7":"否","8":"正常","9":"37.2及以下","10":"陕西省延安市子长市子长市统计局政法大楼 经纬度:109.67538,37.14258","11":"否","12":"","13":"","14":""},"version":13,"stat_content":{"今日是否在京":"否","今日是否在湖北?":"否","今日是否“密切接触”疑似或确诊人群?":"否","今日是否在集中隔离点隔离":"否","今日本人身体情况(多选)":"正常"},"location":{"province":"陕西省","country":"中国","city":"延安市","longitude":109.67538,"latitude":37.14258},"sick":"","accept_templateid":""}
这段json数据中,除地址以外,其他的数据都是服务器默认填好的,因此我们在发送数据时,只需要改动一下json数据当中的location即可
那么怎么获取位置呢,腾讯给我我们提供了一个接口,我们可以使用这个接口查看自己的位置信息,代码如下:
# 获取定位信息的.py
import requests
import json
url = "https://restapi.amap.com/v3/geocode/regeo?location=109.67538,37.14258&key=a0599c316b9533a47162b9044a64f659&extensions=base"
headers = {
"Accept-Encoding": "gzip, deflate, br",
"User-Agent": "Mozilla/5.0",
"content-type": "application/json",
"Referer": "https://servicewechat.com/wxd2bebfc67ee4a7eb/45/page-frame.html",
"Connection": "keep-alive",
"Host": "restapi.amap.com"
}
r = requests.get(url, headers=headers)
print(r.json())
这里的url是我点击小程序当中的获取当前位置时,使用findler抓包工具抓取的
同样,这个地址接口也向我们响应了一个json数据
我们直接将返回的json数据插入到要发送的json数据中即可
使用多线程完成多用户提交的功能
代码如下
import requests
from threading import Thread
import time
def request_h(url,json,token):
headers = {
"Accept-Encoding": "gzip, deflate, br",
"User-Agent": "Mozilla / 5.0",
"content-type": "application / json",
"Referer": "https: // servicewechat.com / wxd2bebfc67ee4a7eb / 45 / page - frame.html",
"token": token,
"Connection": "keep - alive",
"Host": "reserve.25team.com"
}
while True:
r = requests.post(url, headers=headers, json=json)
print(r.text)
time.sleep(60*60*24)
if __name__ == '__main__':
url = 'https://reserve.25team.com/wxappv1/yi/addReport'
jsons = [{"content": {"0": "否", "1": "", "2": "", "3": "", "4": "", "5": "否", "6": "否", "7": "否", "8": "正常",
"9": "37.2及以下", "10": "陕西省延安市子长市子长市统计局政法大楼 经纬度:109.67538,37.14258", "11": "否", "12": "",
"13": "", "14": ""}, "version": 13,
"stat_content": {"今日是否在京": "否", "今日是否在湖北?": "否", "今日是否“密切接触”疑似或确诊人群?": "否", "今日是否在集中隔离点隔离": "否",
"今日本人身体情况(多选)": "正常"},
"location": {"province": "陕西省", "country": "中国", "city": "延安市", "longitude": 109.67538,
"latitude": 37.14258}, "sick": "", "accept_templateid": ""}]
tokens = ["eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjo1MjQzMSwiZXhwIjoxNjg1MDY2MTQ1LCJpc3MiOiJnaW4tYmxvZyJ9.2PB-82BkbgUI6pOzglN6oMP8KpiHJhmu8KF1iilWAgc"]
threads = []
n = 0
for js in jsons:
t = Thread(target=request_h, args=(url, js, tokens[n]))
n += 1
t.start()
threads.append(t)
for t in threads:
t.join()
其中,因为服务器根据token来分辨用户,要注意token和json数据的一一对应
使用itchat第三方库实现微信自动回复
因为微信官方的原因,有些用户无法使用itchat来进行自动回复,因此这部分代码我就不写了,大家可以再网上查到itchat文档
具体实现如下:
微信自动登录
根据服务器返回的json数据判断是否签到成功
签到成功则在对应群里发送成功标志
签到失败则向文件传输助手发送失败原因
正好之前我在阿里云买了一年的服务器,可以将程序安装到服务器上,再设置后台运行,这样的话就可以实现每天自动签到了
没有服务器的话,大家可以将程序部署到自己的电脑上,但是因为程序耗时较长,所以我不建议这么做
使用scp命令将程序发送到 远程 家目录下的 Documents
scp -r app_sign.py root@47.105.49.126:/Documents
使用ssh命令打开远程服务器
这里不需要密码是因为我之前设置过免密登陆
如何设置免密登陆
ssh root@47.105.49.126
进入到以下页面说明连接成功了
可以看到我之前发送的.py文件已经发送到了服务器目录下
设置程序后台运行
nohup python3 app_sign.py > run.log 2>& 1
nohup是永久执行的命令,如果疫情结束不需要签到的话,需要使用kiil命令关闭进程
OK,这就是整个程序的实现过程
来源:https://blog.csdn.net/qq_44639286/article/details/105763497


猜你喜欢
- python中捕获键盘操作一共有两种方法第一种方法:使用pygame中event方法使用方式如下:使用键盘右键为例if event.type
- 前言ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。随着框架代码量的增加,一些潜在的威胁也逐渐暴
- 一、正则表达式概述 如果原来没有使用过正则表达式,那么可能对这个术语和概念会不太熟悉。不过,它们并不是您想象的那么新奇。请回想一下在硬盘上是
- 1.检查mysql是否安装yum list installed | grep mysql如果有的话 就全部卸载yum -y remove +
- 如果你忘记了你的MYSQL的root口令的话,你可以通过下面的过程恢复。1. 向mysqld server 发
- 本文以实例分析了Python中asyncore模块的原理及用法,分享给大家供大家参考。具体分析如下:asyncore库是python的一个标
- 本文实例讲述了Python使用pylab库实现绘制直方图功能。分享给大家供大家参考,具体如下:Python直方图#!/usr/bin/pyt
- 不止python,你可以利用任何语言那实现通过http请求来操作你自己的小程序云数据库了背景也是在最近吧,小程序更新了云开发 HTTP AP
- 可视化包Pygal生成可缩放矢量图形文件可以在尺寸不同的屏幕上自动缩放,显示图表#安装pygalpip install pygal'
- Pycharm运行时总是跳出Python Console最近运行程序的时候发现,每次点击运行之后,都是出现的Python Console。最
- 本文实例讲述了PHP观察者模式原理与简单实现方法。分享给大家供大家参考,具体如下:当一个对象状态发生改变后,会影响到其他几个对象的改变,这时
- 概述最近在跑一篇图像修复论文的代码,配置好环境之后开始运行,发现数据一直加载不进去。害,还是得看人家代码咋写的,一句一句看逻辑,准能找出问题
- 很多时候关心的是优化SELECT 查询,因为它们是最常用的查询,而且确定怎样优化它们并不总是直截了当。相对来说,将数据装入数据库是直截了当的
- (1)IN运算符:它可以用来匹配一个固定集合中的某一项。比如说一个集合里面的年份有(2001,2003,2005),那么就可以有:SELEC
- 一、使用python3做webervice接口测试的第三方库选择suds-jurko库,可以直接pip命令直接下载,也可以在pypi官网下载
- 代码如下import numpy as npfrom matplotlib import pyplot as plt# 用numpy生成数据
- 在网页中经常见到两类不同的按钮。一类表示当前所示的状态,一类表示将要进行的动作。(如下图) 那么,同样是icon类的按钮,为什么有
- 场景:在页面中点击按钮,数量增加,值是存在store中的,点击事件,值没变。<script setup lang="ts&q
- 这里讲解是图片上传和图片预览。主要是围绕我们常用功能的列子做讲解 ,并且没有格外引入其他js 所以你复制过去做简单修改便可以看到效果效果图:
- 背景之前是用的是typora来写的文章,最近typora最近开始收费了,所以就不想用了,于是找到了一个替代品MarkText,感觉跟typo