跳到主要内容

Practice App 设置

Practice App 是随本文档发布的小型网页应用。它是所有课程的自动化目标:带类型读数的仪表盘、图标鲜明的按钮、按需唤出的弹窗、可滚动的目标列表,以及一个滑块验证挑战。

配置一次,约五分钟。

为什么需要练习目标

自动化课程需要一个对每位读者、每次运行都完全一致的屏幕。真实应用无法保证——内容每天变、账号各不同、素材有版权。而 Practice App:

  • 确定——所有数值固定。Gold 永远是 12480,时钟永远是 09:45,目标列表永远是那十二行。你的 OCR 读数会与课程逐位一致。
  • 可控——奖励弹窗只在要求时出现(?popup=1),这正是可选元素课程能复现的原因。
  • 属于你——随文档发布。无需授权,也不会在你背后改变。

第 1 步 — 获取文件

应用由四个 HTML 文件和一个样式表组成,作为静态文件由本文档站点在 /practice-app/ 提供:

文件界面
index.html登录
dashboard.html带四个读数的仪表盘
targets.html可滚动的目标列表
verify.html滑块验证挑战

如果你在托管站点阅读本文档,从 /practice-app/ 下载该文件夹。如果你有仓库,它位于 docs-site/static/practice-app/

第 2 步 — 在电脑上启动服务

任何静态文件服务器都可以。用 Python(如果你的机器有本应用的工具链,它已经在了):

python -m http.server 8010 --bind 0.0.0.0 --directory path/to/practice-app

--bind 0.0.0.0 是关键:它让模拟器也能访问服务,而不只是你的电脑。

首次使用时在 Windows 防火墙放行端口(PowerShell,管理员权限):

powershell -Command "New-NetFirewallRule -DisplayName 'Practice App 8010' -Direction Inbound -LocalPort 8010 -Protocol TCP -Action Allow"

第 3 步 — 查找电脑的局域网地址

模拟器通过电脑的局域网 IP 访问它,而不是 localhost

ipconfig

找到你所用网络适配器的 IPv4 地址——例如 192.168.1.3。(使用 MuMu 桥接网络时,模拟器在同一网段,如 192.168.1.4。)

第 4 步 — 在模拟器中打开

在模拟器浏览器中访问:

http://<你的电脑IP>:8010/dashboard.html

你应看到仪表盘:

模拟器浏览器中的 Practice App 仪表盘

如果页面打不开,先从模拟器内部测试连通性——通过 ADB 快速检查:

adb shell "curl -s -o /dev/null -w '%{http_code}' http://<你的电脑IP>:8010/dashboard.html"

返回 200 说明服务与防火墙没问题,剩下的问题只在你于浏览器里输入的 URL。

各个界面

仪表盘

大多数课程的主场。四个读数——每个对应一种 OCR 值类型——外加四个操作按钮和一条活动日志:

带编号的仪表盘读数

① Gold ② Energy ③ Troops ④ Next Cycle —— 每个读数对应一种 OCR 值类型。⑤ 状态栏:一个时钟和一组坐标,两者都是自定义正则的目标。

#读数显示它教的 OCR 类型
Gold12480数字(Number)
Energy85%百分比(Percentage)
Troops3/5计数器(Counter x/y)
Next Cycle04:20时间(Time mm:ss
状态栏09:45X:1167 Y:1120自定义正则(Custom)

四个读数、四种不同的值类型,同处一屏——于是一个练习目标就覆盖了 Read Text 能提取的每一种内容类型。

奖励弹窗

打开 dashboard.html?popup=1,Daily Reward 对话框出现;不带参数则不出现。Claim 给 Gold 读数加 2500;Close 关闭对话框:

按需唤出的奖励弹窗

① 地址栏里的 ?popup=1 开关——两种状态的全部差别就在这里。② Claim 给 Gold 加 2500。③ Close 关闭而不领取。

这个开关是第 04 课的核心:一个流程必须正确处理两种状态。

Targets

十二行固定条目,每行有等级徽章(A/B/C)、名称和等宽字体读数 X:1167 Y:1120 VAL:320。列表可滚动——正是 Swipe(滑动)练习所需——读数则供 Custom 正则 OCR 使用:

Targets 列表

① 每行的读数。一个字符串里三个数字,正是 Custom 正则 OCR 存在的理由——见第 06 课

Verify

滑块验证:把手柄拖进虚线缺口。缺口位置固定(轨道的 62%),因此可以精确说明预期拖动距离;需要第二种情形时用 ?gap=40 移动缺口:

滑块验证挑战

① 手柄,在轨道起点。② 它必须到达的虚线缺口。箭头就是你的流程要执行的滑动——缺口固定意味着拖动距离固定。

通过查询串固定数值

所有数值都可以通过查询串固定——课程用它构造精确场景:

参数作用用于
?popup=1显示奖励弹窗第 04 课
?gold=900设置 Gold 读数阈值分支
?energy=15%设置 Energy毕业设计低能量路径
?troops=5/5设置 Troops 计数"满员"情形
?timer=00:10设置周期计时时间读取
?clock=21:30设置状态栏时钟按时段分支
?x=990&y=1040设置坐标Custom 正则
?gap=40移动滑块缺口第二种验证情形

参数可以组合:dashboard.html?popup=1&gold=900&troops=5/5

最佳实践

  • 做课程时保持服务运行——页面消失,流程的检测会全部落空。
  • 在模拟器浏览器里收藏仪表盘 URL
  • 使用固定参数构造课程要求的确切状态,而不是苦等它出现。
  • 小分辨率下若浏览器工具栏遮挡页面,将浏览器全屏

故障排查

模拟器打不开页面,但电脑可以。 服务绑定在 localhost(请绑定 0.0.0.0),或缺防火墙规则,或你在模拟器里输入了 localhost 而不是电脑的局域网 IP。

数值与课程不一致。 URL 里残留了固定参数。打开纯净的 dashboard.html

弹窗从不出现。 它只在 ?popup=1 时出现。这是特性,不是缺陷。

OCR 读数乱码。 确认模拟器分辨率是 配置 MuMu 里设置的 1280×720——读数是按该分辨率设计的。

相关页面