py控件未实现wechat自动添加好友

查看 56|回复 9
作者:Quiete   
py写到添加到通讯录,好友哪里,找不到控件,写不下去了,哈哈,半成品,
因为在小厂子工作,客户多,一个一个添加,眼睛要看瞎掉,
写了半天,卡到添加到通讯录了  哈哈
[Python] 纯文本查看 复制代码import uiautomation as auto
import subprocess
import time
import os
def is_user_not_found(target_window):
    """
    判断是否出现“无法找到该用户,请检查你填写的账号是否正确”的提示信息。
    :param target_window: 微信主窗口对象
    :return: 如果找到提示信息,返回 True;否则返回 False。
    """
    try:
        # 查找提示信息控件
        not_found_message = target_window.ListItemControl(Name="无法找到该用户,请检查你填写的账号是否正确。")
        if not_found_message.Exists(5):  # 动态等待提示信息加载
            print("\n找到提示信息:无法找到该用户,请检查你填写的账号是否正确。")
            return True
        else:
            print("\n未找到提示信息:无法找到该用户,请检查你填写的账号是否正确。")
            return False
    except Exception as e:
        print(f"发生错误: {e}")
        return False
def read_friend_from_file(file_path):
    """
    从指定文件中读取一行文本。
    :param file_path: 文件路径
    :return: 读取到的第一行文本内容,如果文件为空或不存在,返回 None。
    """
    try:
        if not os.path.exists(file_path):
            print(f"文件不存在: {file_path}")
            return None
        with open(file_path, "r", encoding="utf-8") as file:
            line = file.readline().strip()  # 读取第一行并去除首尾空白字符
            if line:
                print(f"从文件读取到的内容: {line}")
                return line
            else:
                print("文件为空")
                return None
    except Exception as e:
        print(f"读取文件时发生错误: {e}")
        return None
def click_contacts_button(target_window):
    """
    点击通讯录按钮。
    :param target_window: 微信主窗口对象
    :return: 如果成功点击,返回 True;否则返回 False。
    """
    try:
        contacts_button = target_window.ButtonControl(Name="通讯录")
        if contacts_button.Exists(5):  # 动态等待按钮加载
            print("\n找到按钮:通讯录")
            if contacts_button.IsEnabled:
                contacts_button.Click()  # 点击按钮
                print("已点击按钮:通讯录")
                return True
            else:
                print("通讯录按钮不可用")
                return False
        else:
            print("\n未找到按钮:通讯录")
            return False
    except Exception as e:
        print(f"发生错误: {e}")
        return False
def click_add_friend_button(target_window):
    """
    点击添加朋友按钮。
    :param target_window: 微信主窗口对象
    :return: 如果成功点击,返回 True;否则返回 False。
    """
    try:
        add_friend_button = target_window.ButtonControl(Name="添加朋友")
        if add_friend_button.Exists(5):  # 动态等待按钮加载
            print("\n找到按钮:添加朋友")
            if add_friend_button.IsEnabled:
                add_friend_button.Click()  # 点击按钮
                print("已点击按钮:添加朋友")
                return True
            else:
                print("添加朋友按钮不可用")
                return False
        else:
            print("\n未找到按钮:添加朋友")
            return False
    except Exception as e:
        print(f"发生错误: {e}")
        return False
def input_wechat_account(target_window, account):
    """
    在微信号/手机号输入框中输入内容。
    :param target_window: 微信主窗口对象
    :param account: 要输入的微信号或手机号
    :return: 如果成功输入,返回 True;否则返回 False。
    """
    try:
        input_box = target_window.EditControl(Name="微信号/手机号")
        if input_box.Exists(10):  # 动态等待输入框加载
            print("\n找到微信号/手机号输入框")
            # 点击输入框以确保焦点正确
            if input_box.IsEnabled:
                input_box.Click()  # 点击输入框
                print("已点击微信号/手机号输入框")
            else:
                print("微信号/手机号输入框不可用")
                return False
            # 输入内容
            input_box.SendKeys(account)  # 输入内容
            print(f"已输入内容: {account}")
            return True
        else:
            print("未找到微信号/手机号输入框")
            return False
    except Exception as e:
        print(f"发生错误: {e}")
        return False
def click_search_result(target_window, account):
    """
    点击动态生成的搜索结果。
    :param target_window: 微信主窗口对象
    :param account: 要搜索的微信号或手机号
    :return: 如果成功点击,返回 True;否则返回 False。
    """
    try:
        # 动态生成的搜索结果名称为 "搜索:{account}"
        search_result_name = f"搜索:{account}"
        print(f"\n正在查找搜索结果: {search_result_name}")
        # 查找动态生成的 ListItemControl
        search_result = target_window.ListItemControl(Name=search_result_name)
        if search_result.Exists(10):  # 动态等待加载
            print(f"找到搜索结果: {search_result_name}")
            if search_result.IsEnabled:
                search_result.Click()  # 点击搜索结果
                print("已点击搜索结果")
                return True
            else:
                print("搜索结果不可用")
                return False
        else:
            print("未找到搜索结果")
            return False
    except Exception as e:
        print(f"发生错误: {e}")
        return False
def click_clear_button(target_window):
    """
    点击清空按钮。
    :param target_window: 微信主窗口对象
    :return: 如果成功点击,返回 True;否则返回 False。
    """
    try:
        # 查找清空按钮
        clear_button = target_window.ButtonControl(Name="清空")
        if clear_button.Exists(5):  # 动态等待按钮加载
            print("\n找到按钮:清空")
            if clear_button.IsEnabled:
                clear_button.Click()  # 点击按钮
                print("已点击按钮:清空")
                return True
            else:
                print("清空按钮不可用")
                return False
        else:
            print("\n未找到按钮:清空")
            return False
    except Exception as e:
        print(f"发生错误: {e}")
        return False
def main():
    # 目标程序路径(根据实际程序修改)
    target_program_path = r"D:\微信\WeChat\WeChat.exe"  # 替换为目标程序的实际路径
    # friends.txt 文件路径(假设与脚本在同一目录下)
    script_dir = os.path.dirname(os.path.abspath(__file__))  # 获取当前脚本所在目录
    friends_file_path = os.path.join(script_dir, "friends.txt")  # 构造文件路径
    # 启动目标程序
    print(f"正在启动程序: {target_program_path}")
    subprocess.Popen(target_program_path)
    time.sleep(5)  # 等待程序启动完成
    # 查找目标窗口
    target_window = auto.WindowControl(searchDepth=1, ClassName="WeChatMainWndForPC")
    if not target_window.Exists(10):  # 动态等待窗口加载
        print("未找到目标窗口")
        return
    # 激活目标窗口
    target_window.SetActive()
    print("已激活目标窗口")
    # 点击通讯录按钮
    if not click_contacts_button(target_window):
        return
    time.sleep(2)  # 等待界面更新
    # 点击添加朋友按钮
    if not click_add_friend_button(target_window):
        return
    time.sleep(2)  # 等待界面更新
    # 从文件中读取一行文本
    friend_account = read_friend_from_file(friends_file_path)
    if not friend_account:
        print("未读取到有效的微信号/手机号")
        return
    # 在输入框中输入内容
    if not input_wechat_account(target_window, friend_account):
        return
    time.sleep(2)  # 等待界面更新
    # 点击动态生成的搜索结果
    if not click_search_result(target_window, friend_account):
        return
    time.sleep(2)  # 等待界面更新
    # 判断是否出现提示信息
    if is_user_not_found(target_window):
        print("\n[最终结果] 检测到无法找到用户的提示信息")
        
        # 如果找到提示信息,点击清空按钮
        if click_clear_button(target_window):
            print("\n已清空输入框内容")
        else:
            print("\n未能清空输入框内容")
    else:
        print("\n[最终结果] 未检测到无法找到用户的提示信息")
if __name__ == "__main__":
    main()

按钮, 提示信息

bincoffee   

期待完善,等待分享
Mariner   

感觉很有用啊,感谢大佬
zhiyeameng   

我记得有个wxauto的库,就是基于uiautomation实现的,应该是封装了这个功能
yujianlixi   

永远支持吾爱破解论坛~
4899   

有没有一种可能,你搜索的这个微信好fjsdgkj 本来就是不存在的,所以无法继续往下走了。
Quiete
OP
  


4899 发表于 2025-4-28 09:11
有没有一种可能,你搜索的这个微信好fjsdgkj 本来就是不存在的,所以无法继续往下走了。

你猜我会那么蠢吗,不知道
yinuo2012   

期待最终版本!!!
airxy1   

很厉害,赞一个啊
逸先生   

可以看看wxauto这个库,有你需要的这个添加好友功能,其他功能也比较齐全。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部