• Python实现微信自动化发送信息


    需求:利用PC端微信实现自动向文件传输助手,好友等发送信息

    库说明

    psutil: 获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息,用于获取进程ID
    pywinauto:自动化Microsoft Windows GUI的python模块,用于检索微信窗口的控件位置(https://www.kancloud.cn/gnefnuy/pywinauto_doc)       
    pyautogui:PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作用于控制键盘热键
    pyinstaller -F xxx.py  最后用打包exe
    

    知识点1:如何获取进程的ID?

    可使用psutil 库来查看所有进程的名字,匹配进程名字返回进程ID,,进程名字ID查看工具:inspect.exe:

    「inspect.exe」https://www.aliyundrive.com/s/JDSBosz7CfR 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

    1. import psutil
    2. # 获取进程id
    3. def get_pid(processName):
    4. for proc in psutil.process_iter():
    5. try:
    6. if (proc.name() == processName):
    7. print(proc.name())
    8. print(str(proc.pid))
    9. return proc.pid
    10. except psutil.NoSuchProcess:
    11. pass
    12. return -1

    知识点2:打开微信可以使用快捷键:ctrl+alt+w

    1. # 打开微信的快捷键
    2. pyautogui.hotkey('ctrl', 'alt', 'w')

     知识点3:利用进程ID实例化

    1. # 利用进程ID初始化一下实例
    2. app = Application(backend='uia').connect(process=procId)
    3. # print(app.window())
    4. # 检索微信窗口
    5. main_Win = app.window(class_name='WeChatMainWndForPC')
    6. # 打印所有的窗口控件信息
    7. # main_Win.print_control_identifiers()
    8. # 最大化
    9. main_Win.maximize()

    知识点4:微信中“通信录”,“搜索”等功能实现

    首先定位“通讯录”元素:main_Win.chind_window()   需要二个参数:title和control_type 

    点击该元素click_input()

    1. # 切换到通讯录
    2. btn1 = main_Win.child_window(title="通讯录", control_type="Button").wrapper_object()
    3. # main_Win.Properties.Button3.click()
    4. btn1.draw_outline(colour='red')
    5. btn1.click_input()

     知识点5: 点击微信的搜索功能

    1. # 搜索联系人--文件传输助手
    2. searchKey = ‘张三’
    3. searchEdit = main_Win.child_window(title="搜索", control_type="Edit").wrapper_object()
    4. searchEdit.draw_outline(colour='red')
    5. searchEdit.click_input()
    6. searchEdit.type_keys(searchKey)
    7. sleep(2)

    知识点6:搜索后处理

    1. # 选择搜索出的第一个
    2. try:
    3. selectItem = main_Win.child_window(title=searchKey, control_type="ListItem").wrapper_object()
    4. selectItem.click_input()
    5. except:
    6. print("对话框已打开")
    7. # 清空对话框
    8. pyautogui.hotkey('ctrl', 'a')
    9. pyautogui.hotkey('backspace')

     知识点7:发送消息

    1. # 发送消息
    2. sendMsg = ‘How are you?’
    3. inputMsg = main_Win.child_window(title="输入", control_type="Edit").wrapper_object()
    4. inputMsg.click_input()
    5. inputMsg.type_keys(sendMsg, with_spaces=True)
    6. # 发送
    7. # sendbtn = main_Win["sendBtn"]
    8. # sendbtn.draw_outline(colour='red')
    9. # sendbtn.click_input()
    10. # 回车发送
    11. pyautogui.hotkey('enter')
    12. print(xlsbody[0][i] + ":发送完成")

    知识点8:置顶与取消置顶

    1. # 置顶
    2. top = main_Win.child_window(title="置顶", control_type="Button").wrapper_object()
    3. # 定位到置顶元素,画个红色的方框醒目
    4. top.draw_outline(colour='red')
    5. top.click_input()
    6. # 取消置顶
    7. notop = main_Win.child_window(title="取消置顶", control_type="Button").wrapper_object()
    8. notop.draw_outline(colour='red')
    9. notop.click_input()

     参考代码如下【学习使用】

    1. # 改变标准输出的默认编码
    2. sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf8')
    3. # 获取进程id
    4. def get_pid(processName):
    5. for proc in psutil.process_iter():
    6. try:
    7. if (proc.name() == processName):
    8. print(proc.name())
    9. print(str(proc.pid))
    10. return proc.pid
    11. except psutil.NoSuchProcess:
    12. pass
    13. return -1
    14. # 获取参数
    15. def get_xls():
    16. # 打开参数表
    17. print("获取参数中")
    18. wb = openpyxl.load_workbook("参数.xlsx")
    19. wscs = wb["参数"]
    20. groupname = wscs['B1'].value.split(',') # 转换为列表组名
    21. groupcoount = len(groupname)
    22. message = wscs['B2'].value
    23. atall = wscs['B3'].value
    24. print(groupname)
    25. print("共计:" + str(groupcoount) + "组")
    26. print("发送内容:" + message)
    27. print("是否@所有人:" + atall)
    28. return groupname, message, atall, groupcoount
    29. # 获取主窗口
    30. def get_body(procId, xlsbody):
    31. # 打开微信的快捷键
    32. pyautogui.hotkey('ctrl', 'alt', 'w')
    33. # 利用进程ID初始化一下实例
    34. app = Application(backend='uia').connect(process=procId)
    35. # print(app.window())
    36. # 检索微信窗口
    37. main_Win = app.window(class_name='WeChatMainWndForPC')
    38. # 打印所有的窗口控件信息
    39. # main_Win.print_control_identifiers()
    40. # 最大化
    41. main_Win.maximize()
    42. # 置顶
    43. top = main_Win.child_window(title="置顶", control_type="Button").wrapper_object()
    44. top.draw_outline(colour='red')
    45. top.click_input()
    46. print(main_Win.is_dialog)
    47. for i in range(xlsbody[3]):
    48. # 切换到通讯录
    49. btn1 = main_Win.child_window(title="通讯录", control_type="Button").wrapper_object()
    50. # main_Win.Properties.Button3.click()
    51. btn1.draw_outline(colour='red')
    52. btn1.click_input()
    53. # 搜索联系人--文件传输助手
    54. # print(i)
    55. searchKey = xlsbody[0][i]
    56. searchEdit = main_Win.child_window(title="搜索", control_type="Edit").wrapper_object()
    57. searchEdit.draw_outline(colour='red')
    58. searchEdit.click_input()
    59. searchEdit.type_keys(searchKey)
    60. sleep(2)
    61. # 选择搜索出的第一个
    62. try:
    63. selectItem = main_Win.child_window(title=searchKey, control_type="ListItem").wrapper_object()
    64. selectItem.click_input()
    65. except:
    66. print("对话框已打开")
    67. # 清空对话框
    68. pyautogui.hotkey('ctrl', 'a')
    69. pyautogui.hotkey('backspace')
    70. # if (xlsbody[2] == "是"):
    71. # # @所有人
    72. # sendMsg = "@"
    73. # inputMsg = main_Win.child_window(title="输入", control_type="Edit").wrapper_object()
    74. # inputMsg.click_input()
    75. # inputMsg.type_keys(sendMsg, with_spaces=True)
    76. # allpeople = main_Win.child_window(title="所有人", control_type="Text").wrapper_object()
    77. # allpeople.draw_outline(colour='red')
    78. # allpeople.click_input()
    79. # 发送消息
    80. sendMsg = xlsbody[1]
    81. inputMsg = main_Win.child_window(title="输入", control_type="Edit").wrapper_object()
    82. inputMsg.click_input()
    83. inputMsg.type_keys(sendMsg, with_spaces=True)
    84. # 发送
    85. # sendbtn = main_Win["sendBtn"]
    86. # sendbtn.draw_outline(colour='red')
    87. # sendbtn.click_input()
    88. # 回车发送
    89. pyautogui.hotkey('enter')
    90. print(xlsbody[0][i] + ":发送完成")
    91. # 取消置顶
    92. notop = main_Win.child_window(title="取消置顶", control_type="Button").wrapper_object()
    93. notop.draw_outline(colour='red')
    94. notop.click_input()
    95. if __name__ == '__main__':
    96. procId = get_pid("WeChat.exe")
    97. if (procId == -1):
    98. print("微信未运行")
    99. else:
    100. get_body(procId, get_xls())

     说明:学习视频来源pywinauto实现微信自动发送消息的小实践_哔哩哔哩_bilibili

    感谢UP主分享。 

  • 相关阅读:
    GBase 8c V3.0.0数据类型——会话信息函数
    Anaconda彻底卸载及重安装
    常用类05:String类(面试中用的最多)
    SQL 优化有哪些技巧?
    IDEA21.3快速搭建SpringBoot项目
    redis 哨兵,高可用的执行者
    Mysql(基本介绍+下载安装+服务器+基本使用+建库建表+navicat/mybitas工具+外键及实例)
    干货|关于代码无法烧录进入Model3开发板的问题整理
    TIM_CCxChannelCmd函数无法关闭互补通道输出
    栈与队列3:有效的括号
  • 原文地址:https://blog.csdn.net/weixin_44007111/article/details/125833112