# tbsg — 饿了么闪购药品采集 Android 真机自动化采集:uiautomator2 驱动 + OCR/规则解析 + 调度平台派单。 ## 入口与环境 ``` 入口: start_run_ele.py <设备序列号> 环境: conda env tbsg (Python 3.9, D:\miniconda3\envs\tbsg\python.exe) 配置: config.json (百度OCR/OSS/DeepSeek key) ``` ## 解析架构(2026-09-22 起) | 层 | 模块 | 说明 | |---|---|---| | **列表分卡(主)** | `ai_helper_vision2.py` | **起送行锚定**:每卡底部必有「起送¥…」行(三选二验证),相邻起送行之间=一张卡。纯规则零AI,结构性防漏卡。残卡(首区间无标题/高度异常)自动裁掉;「搜索结果较少,为你推荐相关店铺」横幅以下推荐流不采集;店铺名只取括号前(去「(快递发…)」后缀) | | 滑块验证码 | `yzm/tmp_captcha_test7.py` | test6 的 A/B 试验版:落点补偿-2、真人模板23条(guiji_new)、右滑0.45~1.55px/ms、折回60~600px/s、减速平滑(末段=前段0.5~0.8倍)、归档独立 test7_image/ | | 卡片边界(备用) | `commons/card_split.py` | 纯视觉:空白游程≥90%屏宽 + 带高≥15 + 间距≥200 → 卡片分隔线(几何对账用,未接主流程) | | 旧版(回滚用) | `ai_helper_vision_cross.py` + `tmp_captcha_test6.py` | 交叉验证分卡 + 旧滑块。回滚 = main1.py 改回对应 import | ## 停止条件 **正常**(is_finished=1):①OCR 检出「搜索结果较少,为你推荐相关店铺」(主出口) ②连续10个无关商品 ③连续8批无新店铺(保底) **异常**(need_reassign=1):验证码日限8次 / 账号被踢 / 白屏重启3次无效 / 平台限额(探针拦截) / 连续3批识别失败 ## 日志体系 | 日志 | 位置 | 内容 | |---|---|---| | 异常日志 | `logs/errors/设备/日期.jsonl` | 14 类异常事件(account_kicked/captcha/white/快照/接口等)| | **压力日志** | `logs/pressure/设备_日期.jsonl` | 每任务一条:crawled_today/tasks_today/captcha_today/runtime → 分析封号阈值 | | 验证码留档 | `yzm/image/test7_image/{success,failure}/日期/` | 每次尝试的复检图+轨迹JSON | | 决策留档 | `screenshots/设备/step4/` | restart_home1/2/kw/ai + white_skip_detail | | 断点 | `ycwj/设备_md5.txt` | visited+滚动位置(异常停止保留,正常结束删除)| ## 关键参数(都在 main1.py / tmp_captcha_test7.py) ``` ENABLE_TITLE_FILTER=False 规格过滤开关(现关) SWIPE_RIGHT_TWO_P=0.80 右手两段式概率(左手0.10/原单笔0.10) CAPTCHA_DAILY_LIMIT=8 验证码日限熔断 tmp_captcha_test7: OFFSET_COMPENSATE=0, RIGHT_SPEED_RANGE=(0.45,1.55), 折回速度400~900px/s, BRAKE_TIME=(0.75,0.88) ``` ## 工具 ``` demo_swipe.py <序列号> [次数] 滑动演示+轨迹存档(swipe_demos/) ai_helper_vision2.py <截图> 列表解析单图测试(标注图存 vision2_debug/) _tmp_batch_qisong.py 起送行分卡批量验证(screenshots 抽样) ``` ## 已知限制 - 「拖出完整N个图形」类验证码:jfbym gap 为粗估,语义判定失败无法避免(重试已加↻换图) - 跨设备接力时 visited 为空(靠 DB 唯一键兜底) - 折返停顿 2.5~3.2s 比真人(0.15~0.8s)长,实测该档失败率最低,保留