最近因为隔离在家,在B站自学了 Python、Javascript、Git、Linux 等各种课程,因为之前学过C、汇编、PHP的经验,基本上都是2倍速过的,很容易。发现 Python 真的很简单。而且模块也很多。最近在玩爬虫,看到小甲鱼又开始抽奖了,于是就有了这个用 Python 实现每日自动抽奖的教程。

本来觉得这个功能肯定有人做了,想直接把代码 Copy 下来,然后直接使用,没想到,网上只找到两个人的代码,而且,都报错,不过好在提供了思路。

思路

1. 用 Fiddler 抓包
虽然可以配置证书、代理用手机抓包,不过这样挺麻烦的,在B站看过有人说可以用桌面版微信,然后将小程序转发给自己,然后在电脑上进行抓包。试了一下,果然挺好用的。在 Fiddler 里边最重要的起始就是两个包,如图所示:

2. 数据分析
根据 Fiddler 抓包结果来看,可以看出来,一个包是获取抽奖列表的,另一个包是我们点击参与抽奖的。而参与抽奖里边需要 POST 一个 URL,那么中间有一段随机乱码,这个乱码应该就是抽奖商品的ID了,那么这个ID从哪来呢?

回到第一个包,在回返数据中,我们可以看到 Public 和 Square 两个数据,就是对应着公共抽奖,和自助抽奖。里边的ID正好对应着我们之前的URL里边的ID。

代码

记得需要安装并引入 requests 模块

import requests


def main():
    url = "https://lucky.nocode.com/v2/lottery/public"
    headers = {
        # 请修改为自己的 Authorization
        "Authorization": "你自己的 Authorization"}
    res = requests.get(url, headers=headers)
    public_info = res.json()['public']
    square_info = res.json()['square']
    for p_id in public_info:
        p_url = 'https://lucky.nocode.com/v2/lottery/%s/join' % p_id['id']
        res = requests.post(p_url, headers=headers)
        data = res.json()
        if res.status_code == 200 and 'errors' not in data:
            print("成功参与抽奖:《%s》" % (p_id['prizes']['data'][0]['name']))
        else:
            print("Whoops, Something Happened")
    for s_id in square_info:
        p_url = 'https://lucky.nocode.com/v2/lottery/%s/join' % s_id['id']
        res = requests.post(p_url, headers=headers)
        data = res.json()
        if res.status_code == 200 and 'errors' not in data:
            print("成功参与抽奖:《%s》" % (s_id['prizes']['data'][0]['name']))
        else:
            print("Whoops, Something Happened")


if __name__ == '__main__':
    main()

测试了一下,成功!

成功参与抽奖:《玛可安迪口红香水套盒 倾心爱恋甜美礼盒》
成功参与抽奖:《JOINFIT 暴汗腰带》
成功参与抽奖:《Pinlo 榨汁机》
成功参与抽奖:《医学大神 14 册套装》
成功参与抽奖:《B.DUCK 临时停车号码牌》
成功参与抽奖:《dw 手镯》
成功参与抽奖:《卡西欧BABY-G樱花粉》
成功参与抽奖:《迪奥 888 发财色? 》
成功参与抽奖:《匡威 1970 颜色任你选》
成功参与抽奖:《纪梵希新款 N37》
成功参与抽奖:《王一博同款守护之眼项链》
成功参与抽奖:《免费送阿玛尼电光蓝色大师气垫一盒》
成功参与抽奖:《DW 手镯一个》

代码已经上传到我的 Github:
https://github.com/Forece/wechat_lottories

ref:
https://blog.csdn.net/zhusongziye/article/details/79887234
https://cloud.tencent.com/developer/article/1165239