从联系人列表中依次选取联系人,搜索联系人,若联系人不存在则跳过,发送消息可包含表情。
当控件不存在,可通过try-except捕获ElementNotFoundError异常。
我们可以利用这种已知的异常来做一些判断,比如我们搜索某个联系人,当这个联系人不在搜索结果中时,我们就可以中断后续的执行了。
源码如下:
import time
from pywinauto import Application, ElementNotFoundError
import keyboard
import io
import win32gui
def 查找发送(窗口, 微信名, 信息):
try:
搜索 = 窗口.child_window(control_type='Edit', title='搜索')
搜索.click_input()
搜索.type_keys('^a').type_keys(微信名)
time.sleep(2)
搜索结果 = 微信窗口.child_window(control_type='List', title='@str:IDS_FAV_SEARCH_RESULT:3780')
联系人项 = 搜索结果.child_window(control_type='ListItem', title=微信名,found_index=0)
联系人项.click_input()
消息输入框 = 微信窗口.child_window(control_type='Edit', title=微信名)
消息输入框.click_input()
消息输入框.type_keys('^a')
for line in io.StringIO(信息):
keyboard.write(line.strip())
keyboard.send('ctrl+enter')
发送 = 微信窗口.child_window(control_type='Button', title='发送(S)')
发送.click_input()
except ElementNotFoundError:
print("控件未找到")
except:
raise
if __name__ == '__main__':
# 根据应用程序窗口名获得句柄
句柄 = win32gui.FindWindow(None, '微信')
# 通过句柄连接已有微信进程
微信主程序 = Application(backend='uia').connect(handle=句柄)
# 拿到微信主窗口
微信窗口 = 微信主程序.window(class_name='WeChatMainWndForPC')
微信窗口.restore()
联系人列表 = ['文件传输助手' , 'xxx']
消息 = '\ue105哈哈哈实验不要回我消息\ue409'
for 联系人 in 联系人列表:
查找发送(微信窗口, 联系人, 消息)
总结
本节课学习了控件的其他常用操作,再结合拓展的鼠标,键盘操作,一整套完整的桌面软件自动化的技术都涵盖在内了,相信实战中的微信自动群发会给同学们带来一些启发。在此恭喜大家完成了实战训练营二期的全部课程,感谢大家坚持到了最后,也感谢大家对老师的信任与陪伴。本次训练营的周期很长,课程涵盖的内容也非常广,大家学习起来会有疑惑和困顿,这都是正常的。但是不用担心,一个旧的结束代表着一个新的开始,训练营的课程是结束了,但是我们的学习之路才刚刚开始,老师永远欢迎你们!最后祝大家工作顺利,万事如意,财源滚滚!
课后习题
(编程题)开放性编程题,大家发散思维基于更多桌面软件写出自己想要的自动化功能。(欢迎大家将自己的思路与代码分享到知识星球中)