扫一扫二维码手机版
小猿口算优化匹配机制版是一款面向小学生的数学学习应用,重点升级了口算PK的匹配算法,能够根据孩子的年级和真实水平,智能匹配实力相近的对手,让对战练习更公平。同时,软件支持口算、竖式、混合运算等常见题型的拍照识别与自动批改,大幅减轻家长和老师检查作业的负担,是一款兼具趣味性与实用性的学习工具。





优势与不足
速度较快,可在真机和模拟器上运行,环境配置要求低;但没有代码界面,观感一般,仅适用于比大小题型。
原理说明
通过预设的连点器脚本,快速模拟点击和滑动,完成大于/小于符号的操作。
操作步骤
下载安卓连点器应用,具体脚本设置方法可参考相关连点器视频教程。

优势与不足
上手简单,对零基础用户友好;速度相对较慢,主要受文本获取环节影响。
原理说明
通过Airtest连接ADB,读取模拟器控件树中的数字信息,再利用ADB封装方法模拟绘制符号。

操作步骤


dev=device()
for j in range(30):
touch((542, 1202))
wait(Template(r"tpl1728559665389.png", record_pos=(-0.028, -0.299), resolution=(1080, 1920)))
for i in range(10):
time.sleep(0.1)
nums = poco(name="android.widget.TextView")
if len(list(nums))!=0:
num1 = nums[2].get_text()
num2 = nums[3].get_text()[1:]
num1 = float(num1)
num2 = float(num2)
if num1 > num2:
dev.swipe_along([(537, 1253), (779, 1435), (537, 1684)],duration=0.01)
print('>')
else:
dev.swipe_along([(537, 1253), (321, 1423), (537, 1684)],duration=0.01)
print('<')
代码中的模板图片需要自行截图替换:先打开一次PK,在Airtest中点击左侧上方的wait,然后在右侧屏幕框选数字中间的问号,将自动生成的wait代码替换示例中的对应部分。


开始PK后,立即运行脚本即可。
优势与不足
速度接近大学生水平,稳定性高,基本不受反爬机制影响;但识别需要一定时间,环境配置较复杂,且存在误识别率。

原理说明
利用ADB(或类似的Python/JS工具)获取设备截图,识别指定区域的数字,再通过ADB模拟绘制大于/小于符号。
操作步骤
OCR项目有较为完整的GitHub教程,参考项目文档按步骤操作即可,但需要一定的实践和摸索时间。

优势与不足
可截取网络数据,直接获取或修改答案,扩展空间大、速度快;但配置相对复杂,容易遇到各种问题,且受官方接口更新影响,稳定性一般。

原理说明
利用中间人代理服务截取模拟器的网络请求,并对小猿口算App获取的数据进行重写修改。
操作步骤
adb shell settings put global http_proxy IP:8080,将IP替换为本机IP。
import mitmproxy
import re
import json
emptylist = []
class Demo:
def request(self, flow: mitmproxy.http.HTTPFlow):
request = flow.request
def response(self, flow):
response = flow.response
request = flow.request
if 'https://xyks.yuanfudao.com/leo-math/android/exams?' in request.url:
res = response.json()
print('获取到数据包:', res)
for i in res["questions"]:
i["answer"] = "1" # 将答案都改成1
i["answers"] = ["1"] # 将答案都改成1
i["userAnswer"] = i["answer"] # 将答案改成正确答案
i['status'] = 1 # 将回答结果设置为正确
# 以上两种选择一种即可,看需求
res["questionCnt"] = 1000 # 这里设置题目数量,可以设置1000刷能量,也可以设置成一题
res["questions"] = res["questions"][:1] # 一题对应的代码
res["questions"] = res["questions"] * 10 # 100题对应的代码,注意开始练习时要选择10,因为10*10=100
print('修改res:', res)
with open('change.json', 'w') as f:
json.dump(res, f)
with open('change.json', 'r') as g:
res = json.load(g)
response.set_text(json.dumps(res))
print(response.text)
if 'https://xyks.yuanfudao.com/leo-game-pk/android/math/pk/match?' in request.url:
res = response.json()
print('获取到数据包:', res)
for i in res['examVO']["questions"]:
i["answer"] = "1"
i["answers"] = ["1"]
res['examVO']["questionCnt"] = 1
res['examVO']["questions"] = res['examVO']["questions"][:1]
print('修改res:', res)
with open('change.json', 'w') as f:
json.dump(res, f)
with open('change.json', 'r') as g:
res = json.load(g)
response.set_text(json.dumps(res))
print(response.text)
addons = [
Demo()
]


在该Python文件所在目录打开命令行,运行 mitmweb -s main.py。然后在App中即可看到修改后的效果,例如将题目改为一题或很多题、答案改为指定值等。
如需进一步自动化,可结合前文提到的ADB、连点器或Airtest方案模拟点击操作;也可以运行以下Python代码进行连续点击:
import os
for i in range(1000):
os.system('adb shell input tap 952 135') # 实际坐标与模拟器有关,可通过Airtest获取


小猿口算PK功能近期热度较高,而优化匹配机制版有效减少了高年级用户参与低年级对局的情况,系统会根据孩子的年级与能力水平匹配对手,使对战过程更加公平,也更适合小学生进行日常练习。