使用python实现微信小程序自动签到功能


Posted in Python onApril 27, 2020

功能描述目标

完成多账号微信小程序每天自动签到

输出

签到成功则向微信群发送签到成功的信息
否则提示用户签到失败,需手动签到

包管理

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数据,具体内容如下

使用python实现微信小程序自动签到功能

我们可以看到,客户端是使用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数据

使用python实现微信小程序自动签到功能

我们直接将返回的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

进入到以下页面说明连接成功了

使用python实现微信小程序自动签到功能

可以看到我之前发送的.py文件已经发送到了服务器目录下

使用python实现微信小程序自动签到功能

设置程序后台运行

nohup python3 app_sign.py  > run.log 2>& 1

nohup是永久执行的命令,如果疫情结束不需要签到的话,需要使用kiil命令关闭进程

OK,这就是整个程序的实现过程

到此这篇关于使用python实现微信小程序自动签到功能的文章就介绍到这了,更多相关python 微信小程序签到内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
举例介绍Python中的25个隐藏特性
Mar 30 Python
Python中使用不同编码读写txt文件详解
May 28 Python
Python实现根据IP地址和子网掩码算出网段的方法
Jul 30 Python
Python中的模块导入和读取键盘输入的方法
Oct 16 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
Aug 15 Python
PyCharm鼠标右键不显示Run unittest的解决方法
Nov 30 Python
python logging模块书写日志以及日志分割详解
Jul 22 Python
pandas如何处理缺失值
Jul 31 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
Aug 17 Python
python计算无向图节点度的实例代码
Nov 22 Python
python中编写函数并调用的知识点总结
Jan 13 Python
pytorch中[..., 0]的用法说明
May 20 Python
Python日志:自定义输出字段 json格式输出方式
Apr 27 #Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 #Python
python logging通过json文件配置的步骤
Apr 27 #Python
Python垃圾回收机制三种实现方法
Apr 27 #Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
Apr 27 #Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
Apr 27 #Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
Apr 27 #Python
You might like
PHP调试函数和日志记录函数分享
2015/01/31 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
通过url查找a元素并点击
2014/04/09 Javascript
nodejs文件操作模块FS(File System)常用函数简明总结
2014/06/05 NodeJs
5种处理js跨域问题方法汇总
2014/12/04 Javascript
jquery中$each()方法的使用指南
2015/04/30 Javascript
javascript返回顶部的按钮实现方法
2016/01/09 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
jquery操作ID带有变量的节点实例
2016/12/07 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
使用layui 的layedit定义自己的toolbar方法
2019/09/18 Javascript
Element InputNumber 计数器的实现示例
2020/08/03 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
python获取元素在数组中索引号的方法
2015/07/15 Python
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
Python文件名匹配与文件复制的实现
2020/12/11 Python
党员自我评议个人对照检查材料
2014/09/16 职场文书
2014年光棍节活动策划方案(创意集锦)
2014/09/29 职场文书
Python之基础函数案例详解
2021/08/30 Python
Python实现提取PDF简历信息并存入Excel
2022/04/02 Python
Mac电脑OS系统下安装Nginx的详细教程
2022/04/14 Servers
Python 图片添加美颜效果
2022/04/28 Python