?🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝
🥰 博客首页:knighthood2001
🌞 系列专栏:uiautomation
😗 欢迎点赞👍评论🗨?
?? 热爱python,期待与大家一同进步成长!!??
????????在平时生活中,我们可能会经常需要发一个文案(求捞捞)给微信许多联系人或发到群里,每次重复复制粘贴会显得特别麻烦,耐心逐渐下降。因此我们有时候还挺需要有能够批量给微信好友/群聊发消息的脚本。
? ? ? ? 根据以上需求,笔者采用python+uiautomation实现了以上批量给好友/群聊发消息的功能。
目录
一、思路
二、所需模块
三、代码讲解? ? ?
????????注意点1?
????????注意点2?
四、总结?
一、思路
? ? ? ? 首先登录微信,然后在搜索框中搜索微信好友/群聊,然后发消息,再重复以上操作。
二、所需模块
import subprocess
import uiautomation as auto
subprocess用于打开微信,uiautomation用于后续元素的定位,文字的输入等等
三、代码讲解? ? ?
首先定义一个a列表,里面存放的是你微信联系人备注/群聊名称,b表示要发送的内容?
# ToDo a表示联系人备注列表,b表示要发送的内容
a = ['小号', '几何核心圈子', 'csdn-卷王集中营']
b = '我真的没被盗号'
接下来登录微信,如果微信没登陆,就点击登录?
# ToDo 这里需要更改微信所在地址,可通过桌面微信图标右键打开文件所在的位置查找到路径
subprocess.Popen('E:\微信\WeChat\WeChat.exe')
# 判断微信是否已经登录(如果微信登陆了,以下代码可以省略,因为判断语句需要花时间去判断,会增加代码运行时间)
wechat_login = auto.PaneControl(Name='微信')
enter_wechat_btn = wechat_login.ButtonControl(Name='进入微信')
if enter_wechat_btn.Exists():
enter_wechat_btn.Click()
进入微信后,定位微信窗格元素
# 进入微信后
wechatWindow = auto.WindowControl(searchDepth=1, className='WeChatMainWndForPC', Name='微信')
# # 点击聊天(一般情况下可以不要)
# button = wechatWindow.ButtonControl(Name='聊天')
# button.Click()
????????接下来就是最重要的环节了首先点击搜索框,输入a中的一个内容,然后在搜索结果中判断是否与遍历内容完全相等,如果完全相等,则点击。点击后就出现了具体聊天页面,然后在输入框中输入b,回车,这样就实现给一个联系人/群聊发消息的过程,要批量发消息,则加一个for循环就好了,这样就实现批量发送消息了。
代码如下
for i in a:
# 搜索
search = wechatWindow.EditControl(Name='搜索')
search.Click()
search.GetParentControl().GetChildren()[1].SendKeys(i)
# 回车 只适用于搜索的是联系人,而不是群,因为群在下面
# time.sleep(2)
# wechatWindow.SendKeys('{Enter}')
searResult = wechatWindow.ListControl(Name='搜索结果').GetChildren()
for sear in searResult:
# print(sear.Name)
if sear.Name == i:
sear.Click()
break
# 输入消息
wechatWindow.EditControl(Name='输入').SendKeys(b)
# 方法一:查找发送按钮并点击
# sendBtn = wechatWindow.ButtonControl(Name='sendBtn')
# sendBtn.Click()
# 方法二:回车发送消息
wechatWindow.SendKeys('{Enter}')
# 记录一下消息给谁发送
print(i, ' 消息已发送')
注意点1?
在搜索框输入要搜索的内容后,可以采用回车,不过该条件前提是搜索的是联系人,而不是群聊,因为搜索内容总是将联系人放在上面,群聊在联系人下面,而回车选择的就是搜索结果的第一个,这样就会出现错误,此外,如果要采用回车,需要设置时间,实现搜索内容输完后再回车,不然结果也会不同。因此这里笔者采用判断内容是否相等而不是采用回车
注意点2?
在输入具体要发送内容后,你可以采用点击发送按钮,也可以采用回车,区别就是回车方法更快?
四、总结?
? ? ? ? ①以上只是关于uiautomation自动化的一个比较实用的小案例,越到后来,越能发现uiautomation的强大,越能感受到写该模块的作者的伟大;
? ? ? ? ②接下来笔者还会更新uiautomation自动化的比较实用的代码与讲解,敬请期待??
? ? ? ? ③如果觉得笔者写uiautomaton自动化还行的话,可以收藏一下文章顶部的uiautomation专栏,接下来更新的相关文章也会陆续放进专栏中,感谢各位支持👍👍👍
|