94 lines
3.3 KiB
Python
94 lines
3.3 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
"""
|
|||
|
|
咪咕 miguSM 命令行工具(TgeBrowser + DrissionPage):
|
|||
|
|
1. 传入手机号 → 新建浏览器、输入手机号、点击发送验证码
|
|||
|
|
2. 传入验证码 → 填写并提交
|
|||
|
|
|
|||
|
|
用法:
|
|||
|
|
set TGEBROWSER_API_KEY=你的API密钥
|
|||
|
|
python run_migu_cli.py --phone 13800138000
|
|||
|
|
python run_migu_cli.py --session-id <上一步返回的session_id> --code 123456
|
|||
|
|
"""
|
|||
|
|
from __future__ import annotations
|
|||
|
|
|
|||
|
|
import argparse
|
|||
|
|
import os
|
|||
|
|
import sys
|
|||
|
|
|
|||
|
|
# 确保 TgeBrowser 客户端和 migu 模块可导入
|
|||
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|||
|
|
|
|||
|
|
from migu_miguSM_dp import (
|
|||
|
|
MIGU_HOME_URL,
|
|||
|
|
connect_dp_to_tgebrowser,
|
|||
|
|
connect_dp_to_ws,
|
|||
|
|
input_code_and_submit,
|
|||
|
|
input_phone_and_send_code,
|
|||
|
|
)
|
|||
|
|
from tgebrowser_client import TgeBrowserClient
|
|||
|
|
|
|||
|
|
|
|||
|
|
def cmd_submit_phone(phone: str, url: str) -> str:
|
|||
|
|
"""步骤一:输入手机号并发送验证码,返回 session_id(此处为 env_id 的字符串形式,用于后续填写验证码)。"""
|
|||
|
|
client = TgeBrowserClient()
|
|||
|
|
start_data = client.create_and_start(
|
|||
|
|
browser_name=f"miguSM_{phone[-4:]}",
|
|||
|
|
start_page_url=url,
|
|||
|
|
)
|
|||
|
|
port = start_data.get("port")
|
|||
|
|
ws = start_data.get("ws")
|
|||
|
|
env_id = start_data.get("envId")
|
|||
|
|
|
|||
|
|
if port:
|
|||
|
|
page = connect_dp_to_tgebrowser(port)
|
|||
|
|
elif ws:
|
|||
|
|
page = connect_dp_to_ws(ws)
|
|||
|
|
else:
|
|||
|
|
raise RuntimeError("TgeBrowser 未返回 port 或 ws")
|
|||
|
|
|
|||
|
|
input_phone_and_send_code(page, phone, url=url)
|
|||
|
|
print("输入电话号码成功,请查收短信验证码")
|
|||
|
|
# 保存到全局,供 submit_code 使用(CLI 模式只支持单次流程)
|
|||
|
|
cmd_submit_phone._page = page # type: ignore
|
|||
|
|
cmd_submit_phone._client = client # type: ignore
|
|||
|
|
cmd_submit_phone._env_id = env_id # type: ignore
|
|||
|
|
return str(env_id or "ok")
|
|||
|
|
|
|||
|
|
|
|||
|
|
def cmd_submit_code(code: str) -> None:
|
|||
|
|
"""步骤二:填写验证码并提交。"""
|
|||
|
|
page = getattr(cmd_submit_phone, "_page", None)
|
|||
|
|
if not page:
|
|||
|
|
raise RuntimeError("请先执行步骤一:python run_migu_cli.py --phone 13800138000")
|
|||
|
|
result = input_code_and_submit(page, code)
|
|||
|
|
print(result.get("message", "验证码已填写"))
|
|||
|
|
|
|||
|
|
|
|||
|
|
def main():
|
|||
|
|
parser = argparse.ArgumentParser(description="咪咕 miguSM 自动化 CLI")
|
|||
|
|
parser.add_argument("--phone", help="手机号码(步骤一)")
|
|||
|
|
parser.add_argument("--code", help="短信验证码(步骤二)")
|
|||
|
|
parser.add_argument("--interactive", "-i", action="store_true", help="步骤一后等待输入验证码(同一进程完成两步)")
|
|||
|
|
parser.add_argument("--url", default=MIGU_HOME_URL, help=f"目标页面,默认 {MIGU_HOME_URL}")
|
|||
|
|
args = parser.parse_args()
|
|||
|
|
|
|||
|
|
if args.phone:
|
|||
|
|
cmd_submit_phone(args.phone, args.url)
|
|||
|
|
if args.interactive:
|
|||
|
|
code = input("请输入短信验证码: ").strip()
|
|||
|
|
if code:
|
|||
|
|
cmd_submit_code(code)
|
|||
|
|
elif args.code:
|
|||
|
|
cmd_submit_code(args.code)
|
|||
|
|
else:
|
|||
|
|
parser.print_help()
|
|||
|
|
print("\n示例:")
|
|||
|
|
print(" python run_migu_cli.py --phone 13800138000 -i # 输入手机号后交互输入验证码")
|
|||
|
|
print(" python run_migu_cli.py --phone 13800138000 # 仅步骤一")
|
|||
|
|
print(" python run_migu_cli.py --code 123456 # 仅步骤二(需在 API 模式或同一进程的步骤一之后)")
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
main()
|