Author:qyan.li
Date:2022.6.3
Topic:借助于
python
自动化技术实现指定音乐的播放和
一、写在前面:
~~~~~~~~ 这是python
构建智能机器人系列的第三篇博文:主要内容是借助于python
实现QQ
音乐的自动播放以及QQ
,微信消息的自动发送,来作为智能机器人的主要功能之一。后续还会继续推出第四篇,也是最后一篇,借助于python
实现邮件的自动化发送。
~~~~~~~~ 参考链接:https://blog.csdn.net/DALEONE/article/details/125197203?spm=1001.2014.3001.5501
二、系统实现:
~~~~~~~~ 借助于python
实现音乐自动播放,微信,qq
消息的自动发送,内部原理核心都是一条:借助于自动化模块模拟人的操作实现指定功能。
~~~~~~~~ 自动化操作本身是python
的强项之一,python
也有非常丰富的第三方模块来辅助实现自动化操作,本项目中主要借助于pyautogui
模块来模拟键盘和鼠标的操作以实现音乐播放和消息发送的功能。
-
QQ
,微信消息自动化发送:~~~~~~~~ 首先看较为简单的消息自动化发送,老样子,还是先上代码,方便大家参考借鉴:
import pyautogui import pyperclip import time class AutoMsg(): def __init__(self,msg,friendName,key): self.msg = msg self.name = friendName self.key = key def sendMsg(self): # Ctrl + alt + w 打开微信 # Ctrl + alt + z 打开QQ if self.key == 'w': pyautogui.hotkey('ctrl', 'alt', 'w') if self.key == 'z': pyautogui.hotkey('ctrl', 'alt', 'z') # 搜索好友 pyautogui.hotkey('ctrl', 'f') # 复制好友昵称到粘贴板 pyperclip.copy(self.name) # 模拟键盘 ctrl + v 粘贴 pyautogui.hotkey('ctrl', 'v') time.sleep(1) # 回车进入好友消息界面 pyautogui.press('enter') def send(self): pyperclip.copy(self.msg) # 模拟键盘 ctrl + v 粘贴内容 pyautogui.hotkey('ctrl', 'v') # 发送消息 pyautogui.press('enter') def start(self): self.sendMsg() self.send() if __name__ == '__main__': MsgClass = AutoMsg('你今天晚上吃饭吗?','我的iPhone','z') MsgClass.start()
~~~~~~~~ 之所以讲消息自动化发送简单,是因为在
QQ
,微信软件运行的状态下,我们可以仅仅只借助于键盘实现消息的自动化发送,而不需要借助于鼠标。而在自动化操作的过程中,最繁琐或者最困难的就是鼠标点击位置的确定,这在后续的QQ
音乐自动播放中会有体现。 ~~~~~~~~ 我们可以先人为实现一下如何仅仅只借助于键盘实现消息的发送:
- 复制一段待发送的消息内容
- 按下
ctrl+alt+z
,调出QQ
的控制面板 ctrl+f
打开QQ的联系人搜索框- 键盘输入消息发送的对象
- 按下
enter
键进入消息发送的界面 ctrl+v
将发送消息粘贴至聊天的输入框- 按下
enter
键消息发送成功
~~~~~~~~ 手动实现之后,在回去看代码就可以理解代码为什么这么写以及为什么这么写可以实现消息的自动化发送。
~~~~~~~~
OK
,针对于代码中的部分重要内容进行说明:小
Tips:
QQ
和微信消息发送的区别在于打开控制面板的快捷键不同,微信为w
,QQ
为z
,其他部分的操作均相同hotkey
和press
的区别在于按下单键和组合键,hotkey
热键会按下ctrl+alt+z
,待三者均按下后放开,模拟人组合键的按键方式pyperclip
模块用于将指定的内容复制至剪切板,借助于copy
函数实现
-
QQ
音乐的自动播放: ~~~~~~~~
QQ
音乐自动播放的原理与与自动化的消息发送类似,区别在于鼠标的定位和使用:QQ
音乐的播放相比于消息的自动化发送更加复杂,复杂的部分主要体现在音乐的播放需要借助于鼠标点击完成,而消息的发送仅仅依靠键盘即可。 ~~~~~~~~ 既然需要鼠标进行点击,那就必须确定待点击的对象组件在屏幕上的具体位置(坐标位置),通过坐标位置移动光标至特定位置,完成点击
click
的操作,从而完成具体的操作。 ~~~~~~~~
OK
,具有上述的前备知识,就可以来看代码啦!!!放在下面,方便大家参考和借鉴:## 模块导入 from pywinauto.application import Application import pyautogui ## 自动播放歌曲 def AutoPlayMusic(MusicName,pause = 0): ''' :param MusicName:待播放的音乐名称 :param pause:是否暂停音乐 :return: None ''' if pause == 0: # 开启音乐软件 app = Application(backend="uia").start(r'C:\Program Files (x86)\Tencent\QQMusic\QQMusic.exe') # 移动鼠标至搜索框位置 pyautogui.moveTo(516, 39) pyautogui.click(button='left') # 剪切清空搜索框 pyautogui.hotkey('ctrl', 'a') pyautogui.hotkey('ctrl', 'x') # 复制粘贴搜索指定歌曲 pyperclip.copy(MusicName) pyautogui.hotkey('ctrl', 'v') time.sleep(2) pyautogui.press('enter') time.sleep(2) # 点击播放按钮 pyautogui.moveTo(750, 450) pyautogui.click(button='left') if pause == 1: pyautogui.click(button='left')
这对于代码中的重要部分进行说明:
小
Tips:
-
copy()
,hotkey()
,press()
调用方法和代码中作用与消息自动化发送中相同 -
代码
app = Application(backend="uia").start(r'C:\Program Files (x86)\Tencent\QQMusic\QQMusic.exe')
用于打开QQ音乐的软件,消息自动发送中未添加此代码,因此必须实现保持微信或者qq开启,当然,也可以添加到消息发送中,注意此处应用 -
值得注意,此处借助于模块
pywinquto
与其他操作的pyautogui
不同,pywinauto
仅用于window
平台,而pyautogui
是跨平台的。 -
moveTo()
,click()
方法是pyautogu
i模拟鼠标操作的方法,moveTo
将光标移至指定位置,click
方法用于点击 -
此处需要注意的是,坐标位置由于电脑屏幕大小的不同会存在区别,具体的位置可以借助于
inspect
软件查看。本代码中,(516,39)
代表搜索框,(750,450)
代表歌曲的播放键。 -
inspect
软件大家可网络资源自行下载,同样也可以使用其他的工具
-
三。总结反思:
~~~~~~~~ 上述的代码可以正常完成项目指定的两个功能,但是缺陷也非常明显,代码编写和执行较为死板,尤其是QQ音乐的自动播放。
~~~~~~~~ 在音乐自动播放的功能中,借助于第三方软件定位坐标实现点击的方法比较死板,搜索框的定位影响不大,但播放按钮的定位影响就会比较大,不同的音乐播放按钮的位置上下往往会出现错位,导致播放不准确,这也是后续改进的方向。