adb shell + python

"""百度阅读自动化脚本 - 纯 adb shell 方案
================================================================
根因分析:
  Appium 的 UiAutomator2 driver 会劫持设备输入事件,导致:
  1. subprocess 调 adb shell 超时(Appium 独占 adb 连接)
  2. Appium Unicode IME 替换系统输入法,破坏搜索触发
  3. Appium driver.tap/press_keycode 在 Unicode IME 下不生效

解决方案:
  完全不用 Appium,只用 adb shell 执行所有操作
================================================================
"""
from time import sleep
import subprocess

# adb 命令封装:自动加 timeout,防止设备断连后卡死
def adb(*args):
    cmd = ['adb'] + list(args)
    try:
        subprocess.run(cmd, capture_output=True, timeout=30)
    except subprocess.TimeoutExpired:
        print(f"  [TIMEOUT] adb {' '.join(args)}")

# ======================================================================
# 步骤 1:启动百度阅读 App
# ======================================================================
print("[1] 启动百度阅读...")
adb('shell', 'am', 'force-stop', 'com.baidu.yuedu')
sleep(2)
adb('shell', 'am', 'start', '-n', 'com.baidu.yuedu/.splash.SplashActivity')
sleep(12)  # 等 Splash → MainActivity 切换 + 主页加载完成

# ======================================================================
# 步骤 2:确保系统拼音输入法(Appium Unicode IME 会破坏搜索触发)
# ======================================================================
print("[2] 切换到系统拼音输入法...")
adb('shell', 'settings', 'put', 'secure', 'default_input_method',
    'com.android.inputmethod.pinyin/.InputService')
adb('shell', 'ime', 'set', 'com.android.inputmethod.pinyin/.InputService')

# ======================================================================
# 步骤 3:关闭启动弹窗
# ======================================================================
print("[3] 关闭启动弹窗...")
# 反馈建议弹窗"稍后反馈"按钮
adb('shell', 'input', 'tap', '280', '860')
# 隐私协议"同意"按钮(首次安装才会弹)
adb('shell', 'input', 'tap', '594', '1006')
sleep(2)

# ======================================================================
# 步骤 4:进入搜索页
# ======================================================================
print("[4] 点击搜索入口...")
adb('shell', 'input', 'tap', '642', '57')  # 主页顶部搜索栏中心
sleep(2)

# ======================================================================
# 步骤 5:输入关键词 + 触发搜索
#    搜索框布局: [放大镜] [武林帝国] [×清空] [取消]
#    ×清空 和 取消 之间的空白 ≈ (831, 57) 是搜索触发点
# ======================================================================
print("[5] 输入 '武林帝国' 并触发搜索...")
adb('shell', 'input', 'text', '武林帝国')
sleep(1)
adb('shell', 'input', 'tap', '831', '57')
print("    搜索已触发,等待结果加载...")
sleep(10)  # 搜索可能导致 App ANR 几秒,必须等够

# ======================================================================
# 步骤 6:点击第一个搜索结果
# ======================================================================
print("[6] 打开第一个搜索结果...")
adb('shell', 'input', 'tap', '155', '340')  # "武林帝国"封面中心
sleep(5)

# ======================================================================
# 步骤 7:点击"免费阅读"进入阅读器
# ======================================================================
print("[7] 点击免费阅读...")
adb('shell', 'input', 'tap', '780', '1480')  # 详情页底部右侧红色按钮
sleep(5)

# ======================================================================
# 收尾:截图验证
# ======================================================================
print("[8] 截图验证...")
adb('shell', 'screencap', '-p', '/sdcard/final.png')
adb('pull', '/sdcard/final.png', r"E:\baidu_read_final.png")
print("\n=== 完成!截图保存在 E:\\baidu_read_final.png ===")

posted @ 2026-10-20 14:09  一只鹿吖  阅读(4)  评论(0)    收藏  举报