You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python3与PyAutoGUI的社交媒体账号自动化集成求助

解决方案:集成API数据获取与PyAutoGUI自动化脚本

先帮你梳理下原代码的核心问题:

  • 原API获取脚本的main函数用递归循环反复调用自身,不仅容易触发栈溢出,而且没有返回获取到的手机号和OTP,只是打印出来,导致模拟脚本拿不到数据
  • 模拟脚本里调用了不存在的fetchapidata.callingfun(),而且y、r_y这些变量未定义,根本没法填入表单
  • 原API逻辑里的状态判断有冗余,重复调用main会导致流程混乱

下面是重构后的完整集成方案:


1. 重构API数据获取脚本(命名为fetch_sms_data.py)

把递归改成while循环,让函数明确返回手机号和OTP,同时优化API调用的等待逻辑:

import requests
import json
import time

API_KEY = "my_api_key"

def get_phone_and_otp():
    # 第一步:获取tzid
    result = requests.get(f'http://api.sms-reg.com/getNum.php?country=ru&service=gmail&apikey={API_KEY}')
    x = json.loads(result.text)
    tzid = str(x["tzid"])
    print(f"获取到tzid: {tzid}")

    # 第二步:等待手机号准备完成
    while True:
        result2 = requests.get(f"http://api.sms-reg.com/getState.php?tzid={tzid}&apikey={API_KEY}")
        y = json.loads(result2.text)
        print(f"当前状态: {y['response']}")
        
        if y["response"] == "TZ_NUM_PREPARE":
            phone_number = y["number"]
            print(f"获取到手机号: {phone_number}")
            break
        time.sleep(3)  # 避免频繁调用API,设置合理间隔

    # 第三步:标记手机号已准备好
    result3 = requests.get(f"http://api.sms-reg.com/setReady.php?tzid={tzid}&apikey={API_KEY}")
    zx = json.loads(result3.text)
    print(f"标记准备状态结果: {zx['response']}")
    
    if zx["response"] != "1":
        raise Exception("标记手机号准备失败,请检查API密钥或服务状态")

    # 第四步:等待获取OTP
    while True:
        result4 = requests.get(f"http://api.sms-reg.com/getState.php?tzid={tzid}&apikey={API_KEY}")
        r_y = json.loads(result4.text)
        print(f"OTP获取状态: {r_y['response']}")
        
        if r_y["response"] == "TZ_NUM_ANSWER":
            otp_code = r_y["answer"]
            print(f"获取到OTP: {otp_code}")
            return phone_number, otp_code
        time.sleep(5)  # OTP生成需要时间,间隔长一点

if __name__ == "__main__":
    # 测试函数
    get_phone_and_otp()

2. 修改PyAutoGUI自动化脚本

现在可以直接调用上面的函数获取手机号和OTP,替换原脚本中未定义的变量和错误调用:

import pyautogui
import time
import pandas as pd
from fetch_sms_data import get_phone_and_otp  # 导入重构后的函数

df = pd.read_csv("input.csv")
df0 = df ["name1"]
df1 = df ["job"]
df2 = df ["name2"]
df3 = df ["name3"]
df4 = df ["name4"]

for i in range(1):
    # 原有的登出/创建账号流程保留
    pyautogui.click(1308, 170) # 点击小账号图标
    time.sleep(5)
    pyautogui.click(1159, 527) # 点击登出按钮
    time.sleep(4)
    pyautogui.click(1270, 169) # 点击登录按钮
    time.sleep(4.5)
    pyautogui.click(620, 468) # 点击移除账号
    time.sleep(2.5)
    pyautogui.click(888, 396) # 点击移除图标
    time.sleep(3.5)
    pyautogui.click(802, 528) # 确认移除
    time.sleep(5)
    pyautogui.click(580, 601) # 创建账号
    time.sleep(6)
    pyautogui.click(594, 654) # 为自己创建
    time.sleep(4)
    
    # 填写个人信息
    pyautogui.click(450, 345) # 名字输入框
    pyautogui.write(df0[i], interval=0.5)
    time.sleep(2)
    pyautogui.click(641, 344) # 姓氏输入框
    pyautogui.write(df1[i], interval=0.5)
    time.sleep(1.5)
    pyautogui.click(453, 407) # 用户ID输入框
    pyautogui.write(df2[i], interval=0.4)
    time.sleep(1.8)
    pyautogui.click(423, 515) # 密码输入框
    pyautogui.write(df3[i], interval=0.4)
    time.sleep(1.4)
    pyautogui.click(592, 516) # 确认密码输入框
    pyautogui.write(df4[i], interval=0.6)
    time.sleep(0.5)
    pyautogui.click(706, 637) # 点击完成按钮
    time.sleep(7)
    
    # 获取手机号并填写
    pyautogui.click(516, 452) # 点击手机号输入框
    time.sleep(3)
    phone_number, otp_code = get_phone_and_otp()  # 调用API获取数据
    pyautogui.write(phone_number, interval=0.2) # 填入手机号
    time.sleep(1)
    pyautogui.click(705, 532) # 发送验证码
    time.sleep(5)
    
    # 填写OTP
    pyautogui.click(449, 480) # 点击OTP输入框
    time.sleep(1.5)
    pyautogui.write(otp_code, interval=0.2) # 填入OTP
    time.sleep(1)
    pyautogui.click(710, 570) # 点击验证按钮
    time.sleep(6)
    
    # 后续生日、性别等流程保留
    pyautogui.click(414, 580) # 点击月份选择
    time.sleep(1)
    pyautogui.click(415, 359) # 选择月份
    time.sleep(0.5)
    pyautogui.click(533, 585) # 点击日期输入框
    pyautogui.write("1") # 填写日期
    time.sleep(0.5)
    pyautogui.click(664, 585) # 点击年份输入框
    time.sleep(0.3)
    pyautogui.write("2000") # 填写年份
    time.sleep(0.2)
    pyautogui.click(423, 669) # 点击性别选择
    time.sleep(0.2)
    pyautogui.click(401, 735) # 选择性别
    time.sleep(1.5)
    pyautogui.scroll(-100)
    time.sleep(0.5)
    pyautogui.click(697, 638) # 点击下一步
    time.sleep(8)
    pyautogui.click(621, 618) # 点击跳过
    pyautogui.moveTo(189, 589)
    time.sleep(0.1)
    pyautogui.scroll(-100)
    time.sleep(0.4)
    pyautogui.click(699, 642) # 点击同意按钮
    time.sleep(10)

关键优化点说明

  • 把递归改成while循环:避免递归深度过大导致的RecursionError,同时流程更可控
  • 函数返回明确的数据:get_phone_and_otp()直接返回手机号和OTP,让自动化脚本可以直接使用
  • 增加API调用间隔:避免频繁请求被API限流,同时减少不必要的网络请求
  • 错误处理:增加了标记准备失败的异常抛出,方便排查问题
  • 修复模拟脚本的变量错误:替换了原脚本中未定义的y、r_y,用实际获取到的数据填充

内容的提问来源于stack exchange,提问作者Sanjeet Kunwar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 15:17:49