因为在小厂子工作,客户多,一个一个添加,眼睛要看瞎掉,
写了半天,卡到添加到通讯录了 哈哈
[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()