【2020.07.20更新】

自动打卡签到已经失效,需要手动打卡,但是自动邀请仍然正常,手动打卡后每天仍然可以获得11天+的会员。

2020.07.20日打卡获得12天会员

2020.07.19打卡获得11天会员

前言

WPS是一款经常用的软件,但是会员又不想买, 有些功能还必须会员使用,本来WPS是有一个【打卡签到】可以免费领取会员的,但是每天总是忘,因此想到利用“云函数”+Server酱实现基于Python的自动打卡签到,这样每天就会自动获得会员了,效果还不错,由于内置了一些小号来接受打卡邀请,因此我们的账号还可获得邀请奖励,2020.07.17日亲测是每天最少获得11天的会员,下面是这几天的实测效果:

2020.07.17亲测有效

2020.07.18又获得11天会员

一.需要的一些配置说明

废话不多说,直接说怎么实现,我们需要进行一些简单的配置。

1.1 获得自己WPS帐号的[sid]和[userid]

首先我们就是要知道自己的【sid】和【userid】,这两个是我们帐号的标志符或者说是自己的WPS帐号的ID身份证明,那么我们去哪里获得这两个参数呢?

其实很简单,首先我们需要知道一些基础的抓包操作,一般浏览器都是【F12】键开启控制台调试,以谷歌浏览器为例,首先跳转到WPS官方的签到网站:https://zt.wps.cn/2018/clock_in/,界面截图如下:

WPS官方签到页面

此时我们按【F12】,点击【网络】,进入抓包调试界面, 这时候我们在签到页面点击登录,按照提示登录后,因为抓包已经开启,故就可在【clock_in】页面获取到自己登陆后返回的【sid】了,需要注意的是WPS账号一定要先绑定手机号和微信,否则可能会提示出错。具体操作截图如下:

具体抓包操作截图

我们把【sid】记录下来先,接下来继续找到我们的【userid】,此信息就是我们手机WPS个人信息中的用户ID,举例:【191641526】这一串数字就是我们的【userid】,如下图示:

获取自己的userid

知道这两个我们就获取了自己的信息了,就可以进行下一步了。

1.2 配置server酱用于信息推送

接下来我们需要配置的是【server酱】,它是用来在push微信信息来告诉我们每天签到是否成功还是失败,使用很简单,只需要按照网站上的流程来即可,网站如下:http://sc.ftqq.com

配置好拿到SERVER酱的SCKEY即可,举例:SCUXXXXXXXXXXXXXXXX

1.3 配置云函数

云函数可以理解为在云上运行的代码,好处就是可以自动执行,不需要你在自己电脑上运行,目前各个商家的云函数每个月都会给用户免费提供一些次数,在这里我用的是腾讯云函数,一个月是100万次的免费次数,实际上我们实现WPS自动签到一个月只需要30次就够了,因此是绰绰有余的。

首先登陆腾讯云:https://cloud.tencent.com/ ,登陆后找到云函数选项,进入,之后新建一个云函数,配置一下点下一步,详情如下图:

选择云函数

新建云函数

新建函数的配置

之后在代码编辑栏里输入一下代码,注意下面的代码中请依次修改 23、27、28、33、34行中的需要修改的部分内容!

# !/usr/bin/env python
# coding=utf-8
import requests
import time
import json
import sys
import pytz
import datetime
import re
from io import StringIO# Python版本 3.6
# 20200717更新:添加签到失败提醒
# 请依次修改 23、27、28、33、34行中的需要修改的部分内容
# 邀请用户签到可以额外获得会员,每日可邀请最多10个用户,已预置了13个小号用于接受邀请,89-101行信息可选删改# 参考以下代码解决https访问警告
# from requests.packages.urllib3.exceptions import InsecureRequestWarning,InsecurePlatformWarning
# requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
# requests.packages.urllib3.disable_warnings(InsecurePlatformWarning)# 初始化信息
SCKEY = '*********复制SERVER酱的SCKEY进来*************(保留引号)'
data = {"wps_checkin": [{"name": "*********请自行输入,仅用于显示*************(保留双引号)","sid": "*********复制'http://zt.wps.cn'网址Cookie中的sid进来*************(保留双引号)"}],"wps_invite": [{"name": "*********请自行输入,仅用于显示*************(保留双引号)","invite_userid": "*********复制手机WPS个人信息中的用户ID进来,类似括号内容(191641526)*************(不保留双引号)","sid": []}]
}
# 初始化日志
sio = StringIO('WPS签到日志\n\n')
sio.seek(0, 2)  # 将读写位置移动到结尾
s = requests.session()
tz = pytz.timezone('Asia/Shanghai')
nowtime = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
sio.write("--------------------------"+nowtime+"----------------------------\n\n")# 微信推送
def pushWechat(desp,nowtime):ssckey = SCKEYsend_url='https://sc.ftqq.com/' + ssckey + '.send'if '失败' in desp :params = {'text': 'WPS小程序签到失败提醒' + nowtime,'desp': desp}else:params = {'text': 'WPS小程序签到提醒' + nowtime,'desp': desp}requests.post(send_url,params=params)# 主函数
def main():# sio.write("\n            ===模拟wps小程序签到===")sid = data['wps_checkin']for item in sid:sio.write("\n为{}签到---↓\n\n".format(item['name']))bl = wps_clockin(item['sid'])if bl == 1:# 获取当前会员信息member_url = 'https://zt.wps.cn/2018/clock_in/api/get_data?member=wps'r1 = s.get(member_url, headers={'sid': item['sid']})# 累计获得会员天数total_add_day = re.search('"total_add_day":(\d+)', r1.text).group(1)sio.write('累计获得会员天数: {}天\n\n'.format(total_add_day))userinfo_url = 'https://vip.wps.cn/userinfo'r2 = s.get(userinfo_url, headers={'sid': item['sid']})resp = json.loads(r2.text)sio.write('会员信息: {{ "类型":{}, '.format(resp['data']['vip']['name']))sio.write('"过期时间":{} }}\n\n'.format(datetime.datetime.fromtimestamp(resp['data']['vip']['expire_time']).strftime("%Y--%m--%d %H:%M:%S")))# sys.exit()wps_inv = data['wps_invite']# 这13个账号被邀请invite_sid = ["V02StVuaNcoKrZ3BuvJQ1FcFS_xnG2k00af250d4002664c02f","V02SWIvKWYijG6Rggo4m0xvDKj1m7ew00a8e26d3002508b828","V02Sr3nJ9IicoHWfeyQLiXgvrRpje6E00a240b890023270f97","V02SBsNOf4sJZNFo4jOHdgHg7-2Tn1s00a338776000b669579","V02ScVbtm2pQD49ArcgGLv360iqQFLs014c8062e000b6c37b6","V02S2oI49T-Jp0_zJKZ5U38dIUSIl8Q00aa679530026780e96","V02ShotJqqiWyubCX0VWTlcbgcHqtSQ00a45564e002678124c","V02SFiqdXRGnH5oAV2FmDDulZyGDL3M00a61660c0026781be1","V02S7tldy5ltYcikCzJ8PJQDSy_ElEs00a327c3c0026782526","V02SPoOluAnWda0dTBYTXpdetS97tyI00a16135e002684bb5c","V02Sb8gxW2inr6IDYrdHK_ywJnayd6s00ab7472b0026849b17","V02SwV15KQ_8n6brU98_2kLnnFUDUOw00adf3fda0026934a7f","V02SC1mOHS0RiUBxeoA8NTliH2h2NGc00a803c35002693584d"]sio.write("\n\n==========wps邀请==========\n\n")for item in wps_inv:sio.write("为{}邀请---↓\n\n".format(item['name']))if type(item['invite_userid']) == int:wps_invite(invite_sid, item['invite_userid'])else:sio.write("邀请失败:用户ID错误,请重新复制手机WPS个人信息中的用户ID并修改'invite_userid'项,注意不保留双引号\n\n")desp = sio.getvalue()pushWechat(desp,nowtime)#print(desp)return desp# wps接受邀请
def wps_invite(sid: list, invite_userid: int) -> None:invite_url = 'http://zt.wps.cn/2018/clock_in/api/invite'for index, i in enumerate(sid):headers = {'sid': i}r = s.post(invite_url, headers=headers, data={'invite_userid': invite_userid})sio.write("ID={}, 状态码: {}, \n\n  请求信息{}\n\n".format(str(index+1).zfill(2), r.status_code, r.text))# wps签到
def wps_clockin(sid: str):if len(sid) == 0:sio.write("签到失败:用户sid为空,请重新输入\n\n")return 0elif "*" in sid or sid[0] != "V":sio.write("签到失败:用户sid错误,请重新输入\n\n")return 0# 打卡签到clockin_url = 'http://zt.wps.cn/2018/clock_in/api/clock_in?member=wps'r = s.get(clockin_url, headers={'sid': sid})if len(r.history) != 0:if r.history[0].status_code == 302:sio.write("签到失败:用户sid错误,请重新输入\n\n")return 0resp = json.loads(r.text)# 判断是否已打卡if resp['msg'] == '已打卡':sio.write("签到信息: {}\n\n".format(r.text))return 1# 判断是否绑定手机elif resp['msg'] == '未绑定手机':sio.write('签到失败: 未绑定手机,请绑定手机后重新运行签到\n\n')return 0# 判断是否重新报名elif resp['msg'] == '前一天未报名':sio.write('前一天未报名\n\n')signup_url = 'http://zt.wps.cn/2018/clock_in/api/sign_up'r=s.get(signup_url, headers={'sid': sid})resp = json.loads(r.text)if resp['result'] == 'ok':sio.write('报名信息: 已自动报名,报名后第二天签到\n\n')return 1else:sio.write('报名失败: 请手动报名,报名后第二天签到\n\n')return 0# 打卡签到需要参加活动elif resp['msg'] == '答题未通过':getquestion_url = 'http://zt.wps.cn/2018/clock_in/api/get_question?member=wps'r = s.get(getquestion_url, headers={'sid': sid})'''{"result": "ok","data": {"multi_select": 1,"options": ["30天文档分享链接有效期","远程下载助手","输出长图片去水印","PDF转图片"],"title": "以下哪些特权是WPS会员和超级会员共同拥有的?"},"msg": ""}'''answer_set = {'WPS会员全文检索','100G','WPS会员数据恢复','WPS会员PDF转doc','WPS会员PDF转图片','WPS图片转PDF插件','金山PDF转WORD','WPS会员拍照转文字','使用WPS会员修复','WPS全文检索功能','有,且无限次','文档修复'}resp = json.loads(r.text)# sio.write(resp['data']['multi_select'])# 只做单选题 multi_select==1表示多选题while resp['data']['multi_select'] == 1:r = s.get(getquestion_url, headers={'sid': sid})resp = json.loads(r.text)# sio.write('选择题类型: {}'.format(resp['data']['multi_select'])) answer_id = 3for i in range(4):opt = resp['data']['options'][i]if opt in answer_set:answer_id = i+1breaksio.write("选项: {}\n\n".format(resp['data']['options']))sio.write("选择答案: {}\n\n".format(answer_id))# 提交答案answer_url = 'http://zt.wps.cn/2018/clock_in/api/answer?member=wps'r = s.post(answer_url, headers={'sid': sid}, data={'answer': answer_id})resp = json.loads(r.text)# 答案错误if resp['msg'] == 'wrong answer':sio.write("答案不对,挨个尝试\n\n")for i in range(4):r = s.post(answer_url, headers={'sid': sid}, data={'answer': i+1})resp = json.loads(r.text)sio.write(i+1)if resp['result'] == 'ok':sio.write(r.text)break# 打卡签到clockin_url = 'http://zt.wps.cn/2018/clock_in/api/clock_in?member=wps'r = s.get(clockin_url, headers={'sid': sid})sio.write("签到信息: {}\n\n".format(r.text))return 1# 判断是否不在签到时间内elif resp['msg'] == '不在打卡时间内':sio.write('签到失败: 不在打卡时间内\n\n')signup_url = 'http://zt.wps.cn/2018/clock_in/api/sign_up'r=s.get(signup_url, headers={'sid': sid})resp = json.loads(r.text)if resp['result'] == 'ok':sio.write('已自动报名,报名后请设置在规定时间内签到\n\n')return 1else:sio.write('报名失败: 请手动报名,报名后第二天签到\n\n')return 0# 其他错误elif resp['result'] == 'error':sio.write('签到失败信息: {}\n\n'.format(r.text))signup_url = 'http://zt.wps.cn/2018/clock_in/api/sign_up'r=s.get(signup_url, headers={'sid': sid})resp = json.loads(r.text)if resp['result'] == 'ok':sio.write('已自动报名,报名后请设置在规定时间内签到\n\n')return 1else:sio.write('报名失败: 请手动报名,报名后第二天签到\n\n')return 0def main_handler(event, context):return main()if __name__ == '__main__':main()

按照说明修改完以上代码后,我们可以先测试触发一下看看是否配置正确,点击下面的【测试】按钮,会返回测试结果,如下图所示:

测试返回结果

确认代码无误后,我们点击完成,之后配置云函数的触发规则,首先点击【触发管理】,之后选择【创建触发器】,具体操作如下图:

创建触发器

创建完触发器后,我们配置触发器规则,首先在触发方式里选择【定时触发】,触发周期里选择【自定义触发周期】,在下面的Cron表达式里填入:0 10 8 * * * *

如下图示:

触发器规则配置

以上完成后,便可解放双手,每天在8点10分自动签到,会员就到手了。

【WPS自动签到】利用云函数实现WPS自动签到获得WPS免费会员相关推荐

  1. 利用云函数+Python实现每日网站自动签到并用QQ提醒

    利用云函数和Python实现蘑菇丁软件每日自动登录签到 由于怕token失效所以写成了每一次打卡前都要登录获取token一次,经过测试多次登录并不会造成登录异常,账号封禁等影响 Python3.6.2 ...

  2. 利用云函数实现网易云音乐自动签到、刷歌

    原理 使用腾讯云免费的[云函数服务]搭建网易云自动打卡,无需手动网页登录打卡,支持多账号,邮箱登陆,每天自动完成,不用每天去网站提交! 刷的歌都来自您的每日推荐歌单,不影响听歌风格. 部署 进入腾讯云 ...

  3. python 腾讯视频签到_云函数实现腾讯视频vip自动签到

    云函数实现腾讯视频vip自动签到 不用每天都去手动签到啦,属实懒人操作.一 次设置可一直使用,除cookie过期需手动更新外. 教程比较细,纯手打,按教程来一般都没问题.如果在有什么地方不懂问我就行. ...

  4. 云函数实现网站自动化签到配置详解【Web函数/Nodejs/cookie】

    文章目录 一.前言 二.配置脚本过程 2.1获取某网站的cookie 2.2获取uuid.aid和_signature 2.3 脚本函数 2.4 注册plus 2.5 配置config.js 三.部署 ...

  5. 【云函数】 利用云函数SCF完成每日一封邮件的发送

    前言: 从我上一篇文章开始说起<通过Linux计划任务每天定时自动发送天气预报给女神>,很惊喜我写的第一篇文章就能获得一千多次阅读,这篇文章算是对上一篇的另一种实现形式:上篇文章开篇表明了 ...

  6. 利用云函数搭建简易的代理池

    本次介绍的是如何快速的利用腾讯云函数来搭建免费的代理池. 很多小伙伴在测试的过程中经常遇到一个问题,被频繁的封ip,当然了我说的是有授权的情况下,请不要做非法使用,因为云函数只能保证你的Ip是流动的但 ...

  7. 云函数爬虫并自动发布公众号推文

    云函数爬虫数据并自动发布公众号推文文章 文章目录 云函数爬虫数据并自动发布公众号推文文章 一.项目简介 二.基本流程 三.项目配置 四.资源网站 五.云函数获取数据 六.云函数发布公众号文章 七.效果 ...

  8. 小程序利用云函数发送电子邮件功能详解

    今天分享一个小功能代码,小程序通过云函数发送电子邮件的功能,上学那会觉得邮箱没啥用了,都快淘汰了的东西,但是现在发现还是有点用处的,印象比较深的就是有一个程序,可以给十年后的自己写邮件,如果大家掌握了 ...

  9. python自动报体温_河北科技大学体温自动上报(python)-云函数版已更新

    # -*- coding: utf-8 -*- """ @Time : 2020/8/6 11:59 @Auth : Ne_21 @File :index.py @IDE ...

  10. 微信小程序利用云函数获取小程序码(二维码) 将buffer流转换为图片

    最近在做毕设,有一个获取小程序码绘制分享海报的需求,因为需要小程序码的数量较多的业务场景,所以只能采用后端生成返回给前端调用或者云开发调用. 生成小程序码的两种方式 HTTPS调用 需要后端生成返回给 ...

最新文章

  1. 这个AI模型用最少的训练数据学习对象之间的关系
  2. Yii使用CTreeView树
  3. 都2021年了,不会还有人连深度学习还不了解吧(六)-- Padding篇
  4. DI 之 3.4 Bean的作用域(捌)
  5. Selenium2+python自动化33-文件上传(send_keys)
  6. 第二十一期:拜托!面试不要再问我Spring Cloud底层原理
  7. SqlServer学习之存储过程
  8. java 动态队列_RabbitMq之动态修改队列参数
  9. 《团队激励与沟通》第 2 讲——激励的方法与应用 重点部分总结
  10. 数据库系统实训——实验八——数据库维护
  11. Vue学习笔记(九) Vue CLI
  12. java 对象 线程安全_JAVA并发编程学习:构造线程安全的对象
  13. linux全盘备份命令,Linux系统磁盘分区备份的操作
  14. android pickerview 多行,Android PickerView 自定义条件选择器 联动
  15. JAVA分布式快速开发基础平台iBase4J
  16. 转:苹果CEO库克:伟大的想法来自不断拒绝接受现状
  17. burp安装及代理设置
  18. android桌面动画
  19. 加拿大学校申请条件获关注,雅思专家有话说
  20. kali安装flash player

热门文章

  1. centos大小写混乱问题
  2. qq音乐网页版下载歌曲
  3. 高德地图大头针功能_有关于高德地图的大头针下落动画。还有就是高德地图的设置...
  4. Linux 之系统美化
  5. developer.biao.daily.20140731
  6. lol最克制诺手的英雄_LOL:最克制诺手的三个英雄,剑姬上榜,第一能打得诺手出不了塔...
  7. 65883-12-7,PEG5-Ms带有甲磺酸基和羟基的PEG连接剂
  8. 失落的帝国攻略java,失落的帝国 --- 吴哥旅游日记(8)
  9. 卷积神经网络结构相关
  10. Java Lombok详解