当前位置:   article > 正文

用 Python 和 uiautomation 实现微信批量发送_联系人发送信息 def

联系人发送信息 def

前段时间发现LP经常要通过微信给同事发送通知类消息,并且为了友好,每条信息还要加上称呼,什么张哥,李姐啥的,每次一条条发实在费劲,我就网上搜了下,看有没有现成的工具可以直接用,发现都不尽如人意,干脆自己整一个。

思路是这样,将要发送的人员名单(包括称呼)以及发送内容都维护到Excel里,程序运行时读取Excel里内容,自动搜索人员姓名(微信昵称或备注名),填入要发送的内容,拼接上称呼(如果需要的话)自动点击发送,这样轮巡直至名单人员全部发送完成。

使用到的库有:uiautomation,xlrd

uiautomation是一个可以用来做窗口程序自动化的库,通过它可以模拟鼠标点击和键盘输入来控制窗口程序。

xlrd用来读取Excel数据

首先需要安装 需要的库:

  1. pip install uiautomation
  2. pip install xlrd

Excel配置如下:

Excel文件名:微信批量发送消息配置表.xlsx

sheet页名称:联系人,发送内容

联系人sheet页格式:

昵称或备注名一定要写全,并且确保和你微信里的是一致的,否则容易误发,切记。

发送内容sheet页格式:

发送内容填在A1列,根据实际情况修改。支持微信自带表情,格式为英文半角中括号[]加表情名称,如[玫瑰] [抱拳]

如果选择带称呼发送,实际发送内容为:张哥,这是一条....

!!!!!!!!注意:昵称或备注一定要和你微信里的一致,如果微信改了Excel里也要同步修改哦!到时候发错人了别怪我没提醒你哦。!!!!!!!!
!!!!!!!!开始前请把你的PC端的微信打开,不要最小化,至少在任务栏上能看到微信图标,这样程序才能唤起微信发送信息的哦。!!!!!!!!

 

完整代码如下:

  1. #!python3
  2. # -*- coding:utf-8 -*-
  3. import uiautomation as auto
  4. import xlrd
  5. logFile='wx_sndmsg.log'
  6. # 定义发送消息的方法,入参为wx:微信;name:要给谁发送;msg:发送内容;wt:每次操作暂停时间
  7. def snd_msg(wx,friend_name,message,waite_time: int=0.2):
  8. #获取微信聊天窗口
  9. wx.SwitchToThisWindow()
  10. wx.ButtonControl(Name="聊天").Click() # 切换到聊天窗口
  11. #搜索好友名称
  12. wx.SendKeys(text='{Ctrl}f', waitTime=waite_time)
  13. wx.SendKeys(text='{Ctrl}a', waitTime=waite_time)
  14. wx.SendKey(key=auto.SpecialKeyNames['DELETE'],waitTime=waite_time)
  15. auto.SetClipboardText(friend_name)
  16. wx.SendKeys('{Ctrl}v',waitTime=waite_time)
  17. wx.SendKey(key=auto.SpecialKeyNames['ENTER'], waitTime=waite_time)
  18. #wx.SendKeys(message, waitTime=waite_time)
  19. auto.SetClipboardText(message)
  20. wx.SendKeys('{Ctrl}v',waitTime=waite_time*2)
  21. wx.SendKey(key=auto.SpecialKeyNames['ENTER'], waitTime=waite_time*4)
  22. def data_check(wb,with_call):
  23. checkCmd=True
  24. #校验发送人名单
  25. try:
  26. sheet1 = wb.sheet_by_name("联系人")
  27. except Exception as e:
  28. auto.Logger.Log('没有"联系人"这个sheet页啊,你看都报错了:\n{}'.format(e), logFile=logFile)
  29. checkCmd = False
  30. try:
  31. sheet2 = wb.sheet_by_name("发送内容")
  32. except Exception as e:
  33. auto.Logger.Log('没有"发送内容"这个sheet页啊,你看都报错了:\n{}'.format(e), logFile=logFile)
  34. checkCmd = False
  35. if checkCmd == False:
  36. return checkCmd
  37. if sheet1.nrows<2:
  38. auto.Logger.Log('联系人sheet页没数据啊亲',logFile=logFile)
  39. checkCmd=False
  40. # 每行数据检查
  41. i = 1
  42. while i < sheet1.nrows:
  43. # 第1列 微信备注名称或昵称检查
  44. friendName = sheet1.row(i)[0].value
  45. if len(friendName.strip())==0:
  46. auto.Logger.Log('联系人sheet页第{}行微信昵称或备注名为空啊亲'.format(i+1), logFile=logFile)
  47. checkCmd=False
  48. callName=sheet1.row(i)[1].value
  49. if len(callName.strip())==0 and with_call:
  50. auto.Logger.Log('联系人sheet页第{}行称呼为空啊亲'.format(i+1),logFile=logFile)
  51. i += 1
  52. #校验发送内容
  53. if len(sheet2.cell_value(0,0))==0:
  54. auto.Logger.Log('发送内容sheet页A1单元格没有内容啊',logFile=logFile)
  55. checkCmd = False
  56. return checkCmd
  57. #主函数,执行取姓名和发送操作
  58. def main_work(wb,with_call):
  59. #获取联系人信息
  60. sheet1=wb.sheet_by_name('联系人')
  61. sheet2=wb.sheet_by_name('发送内容')
  62. message=sheet2.cell_value(0,0)
  63. #获取微信聊天窗口
  64. try:
  65. wx = auto.WindowControl(Name="微信", ClassName='WeChatMainWndForPC')
  66. wx.SwitchToThisWindow()
  67. wx.ButtonControl(Name="聊天").Click() # 切换到聊天窗口
  68. except Exception as e:
  69. auto.Logger.Log('亲,微信没打开啊,请把微信打开好吗,至少在任务栏上能看到微信图标好吧,你看都报错了:\n{}'.format(e),logFile=logFile)
  70. return
  71. auto.Logger.Log('开始发送消息啦',logFile=logFile)
  72. i = 1
  73. while i < sheet1.nrows:
  74. contact=sheet1.row(i)[0].value
  75. call=sheet1.row(i)[1].value
  76. if with_call:
  77. snd_msg(wx,contact,call+','+message)
  78. auto.Logger.Log('发送人:{},发送内容:{}'.format(contact, call + ',' + message), logFile=logFile)
  79. else:
  80. snd_msg(wx, contact, message)
  81. auto.Logger.Log('发送人:{},发送内容:{}'.format(contact, message), logFile=logFile)
  82. i+=1
  83. auto.Logger.Log('发送完成,此次总共发送{}条信息'.format(i-1), logFile=logFile)
  84. if __name__=='__main__':
  85. key = input('选择发送方式: 1.每条信息都带称呼 2.不带称呼 \n')
  86. #通过Excel文件获取发送人名单
  87. file = '微信批量发送消息配置表.xlsx'
  88. try:
  89. wb = xlrd.open_workbook(filename=file)
  90. except Exception as e:
  91. auto.Logger.Log('找不到"{}"这个文件啊亲'.format(file), logFile=logFile)
  92. input('请按回车键退出')
  93. if key=='1':
  94. with_call=True
  95. elif key=='2':
  96. with_call=False
  97. checkCmd = data_check(wb,with_call)
  98. if checkCmd:
  99. main_work(wb,with_call)
  100. input('发送结束,请按回车键退出')

 

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/104232
推荐阅读
相关标签
  

闽ICP备14008679号