Python Requests 通关微信小游戏 羊了个羊

使用 Requests 通关微信小游戏 羊了个羊,目前已实现 羊群闯关话题闯关

更新

  • 2022.09.22
    • 脚本凉了哦

前言

脚本仅供学习使用,禁止用于其他用途,请勿恶意请求对服务器造成持续压力

t值包含个人信息,不要交给他人代挂使用

为了降低对服务器的压力,脚本启动后:

  • 每个账号每隔 10 秒发起一次请求,羊群闯关、话题闯关默认各请求 10 次
  • 如果账号的 t 值不正确或者请求失败(人太多了或者服务器维护),那么会结束该账号后续请求,执行下一个账号

还有不要在用户高峰时使用,可以考虑在 23 点之后再启动脚本,这时的成功率就很高了

抓包

抓包 cat-match.easygame2021.com 请求体中的 t 值(先手动玩下关卡才能刷出 t 值):

1
t: eyxxxxxxxxxxxxxxxx

PC端3.7.6版本的微信是抓不到包的,目前只有低版本微信才能抓到包,

PC端抓包工具有 CharlesFidder

安卓抓包也是可以的:

环境

  • Python:3.10

安装依赖

1
2
pip3 install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install loguru -i https://pypi.tuna.tsinghua.edu.cn/simple

Python代码

settings.py

创建一个 settings.py 文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 支持多账号(一个t值对应一个账号),每个账号按行分隔
# 将抓包得到的 t 值替换掉 t1、t2、t3 之一,其他不需要的删除整行
T = [
't1',
't2',
't3',
]

# 羊群闯关 默认 True 开启,若关闭改为 False
GAME = True

# 羊群闯关请求次数,默认 10 次
GAME_COUNT = 10

# 话题闯关 默认 True 开启,若关闭改为 False
TOPIC = True

# 话题闯关请求次数,默认 10 次
TOPIC_COUNT = 10

main.py

创建一个 main.py 文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import time
import random

import requests
from loguru import logger

from settings import T, GAME, GAME_COUNT, TOPIC, TOPIC_COUNT


SESSIONS = requests.session()


class Yang:

def __init__(self):
self.url = 'https://cat-match.easygame2021.com/sheep/v1/game/'

@staticmethod
def random():
# 随机通关秒数
return random.randint(120, 4800)

def get(self, url):
headers = {
'Host': 'cat-match.easygame2021.com',
't': self.t,
'user-agent': 'Mozilla/5.0 (Linux; Android 7.1.2; Mi 10 Pro Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/4313 MMWEBSDK/20220706 Mobile Safari/537.36 MMWEBID/7862 MicroMessenger/8.0.25.2180(0x28001931) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
'Referer': 'https://servicewechat.com/wx141bfb9b73c970a9/17/page-frame.html',
'Accept-Encoding': 'gzip,compress,br,deflate'
}
try:
response = SESSIONS.get(url, headers=headers, timeout=5)
json = response.json()
if json['err_code'] == 10003:
# {'err_code': 10003, 'err_msg': '没有权限', 'data': None}
return 1
except Exception:
return 2

# {'err_code': 0, 'err_msg': '', 'data': 0}
return 3

def run(self, url, name, counts: int):
for count in range(counts):
data = self.get(url)
if data == 1:
logger.error(f'{name}t 值不正确,该账号结束')
break
elif data == 2:
logger.error(f'{name}{count + 1} 次请求失败,该账号结束')
break
else:
logger.info(f'{name}{count + 1} 次请求成功')
time.sleep(10)
return data

def get_game(self, name, counts: int):
'''
羊群闯关
'''
url = f'{self.url}game_over?rank_score=1&rank_state=1&rank_time={Yang.random()}&rank_role=1&skin=1'
return self.run(url, name, counts)

def get_topic(self, name, counts: int):
'''
话题闯关
'''
url = f'{self.url}topic_game_over?rank_score=1&rank_state=1&rank_time={Yang.random()}&rank_role=2&skin=1'
return self.run(url, name, counts)

def main(self):
for index, t in enumerate(T):
name = index + 1
self.t = t
logger.info(f'运行第【{name}】个账号')
if GAME is True:
game_name = f'账号 {name} 羊群闯关:'
if self.get_game(game_name, GAME_COUNT) != 3:
continue
if TOPIC is True:
topic_name = f'账号 {name} 话题闯关:'
self.get_topic(topic_name, TOPIC_COUNT)

logger.info('所有账号执行完毕')


if __name__ == '__main__':
Yang().main()

settings.pymain.py 放在同一目录下,然后启动脚本:

1
python3 main.py

效果图

01