QQ自动发送消息

QQ自动发送消息

python包导入

import time
import pandas as pd
import pyautogui
import pyperclip

图像识别函数封装

本程序使用pyautogui模块控制鼠标和键盘来实现QQ自动发送消息,因此必须得到需要点击位置的坐标(当然也可以在程序中将位置写死,这样的话就可以省略这个函数),所以我们通过pyautogui的locateOnScreen函数来定位需要点击位置的坐标。

def locate_image_on_screen(image_path, confidence=0.7):
    """
    在屏幕上查找指定图像的位置
    :param image_path: 图像文件的路径
    :param confidence: 匹配的置信度,范围从0到1,值越高匹配越严格
    :return: 图像中心的坐标,如果未找到则返回None
    """
    try:
        location = pyautogui.locateOnScreen(image_path, confidence=confidence)
        return pyautogui.center(location)
    except:
        return None

所以在使用此程序时,需要准备几张截图:

① 搜索框截图
在这里插入图片描述

② 消息发送框截图
在这里插入图片描述

③ 关闭按钮截图
在这里插入图片描述

由于locateOnScreen返回的是图像中心位置的坐标,所以使用时需要进行一定程度偏移,具体偏移程度由实际情况决定。

消息循环发送函数封装

def qq_contacts_message(contacts_messages, search_box_path, input_box_path, cross_path):
    """
    循环发送消息
    :param contacts_messages: 联系人与发送消息所对应的excel表格
    :param search_box_path: 搜索框截图路径
    :param input_box_path: 消息发送框截图路径
    :param cross_path: 关闭按钮截图路径
    """
    # 程序暂停,留时间让用户打开应用(此处留3秒)
    time.sleep(3)
    # 循环遍历联系人_发送内容表格
    for _, row in contacts_messages.iterrows():
        # 每次发送前等待1秒,以免上一个窗口未关闭
        time.sleep(1)
        # 复制联系人到剪切板
        pyperclip.copy(row.iloc[0])
        # 识别搜索框并点击
        search_box_location = locate_image_on_screen(search_box_path)
        pyautogui.click(search_box_location)
        # 粘贴内容到搜索框
        pyautogui.hotkey('ctrl', 'v')
        # 下移一定位置,点击搜素结果,进入联系人界面
        x, y = search_box_location
        new_y = y + 110 # 此处下移110px,根据不同使用者,需要更改
        pyautogui.moveTo(x, new_y, duration=1)
        pyautogui.click(x, new_y)
        pyautogui.keyDown('enter')
        # 点击发送框,复制粘贴发送内容并发送
        time.sleep(2) # 点击发送框前,暂停2秒,以免图片识别时联系人界面还未打开
        input_box_location = locate_image_on_screen(input_box_path)
        x, y = input_box_location
        pyautogui.click(x, y+100)
        pyperclip.copy(row.iloc[1])
        pyautogui.hotkey('ctrl', 'v')
        pyautogui.hotkey('ctrl', 'enter')
        # 点击关闭按钮关闭聊天界面
        cross_location = locate_image_on_screen(cross_path)
        x, y = cross_location
        pyautogui.moveTo(x+60, y, duration=0.5)
        pyautogui.click(cross_location)
        pyautogui.keyDown('enter')

程序中有些地方需要注意:

① time.sleep函数:为了避免在进行图片识别时,对应界面还未打开,导致定位失败,因此需要暂停一定时间,使得每一个图像可以被正常识别

② 位置偏移:函数定位的坐标是图像的中心位置,不一定是我们需要点击的位置,所以需要进行一定偏移。如点击关闭按钮时,根据函数定位得到的坐标可能是全屏按钮,所以需要向右偏移60px
在这里插入图片描述

最终代码:

import time
import pandas as pd
import pyautogui
import pyperclip

def locate_image_on_screen(image_path, confidence=0.7):
    """
    在屏幕上查找指定图像的位置
    :param image_path: 图像文件的路径
    :param confidence: 匹配的置信度,范围从0到1,值越高匹配越严格
    :return: 图像中心的坐标,如果未找到则返回None
    """
    try:
        location = pyautogui.locateOnScreen(image_path, confidence=confidence)
        return pyautogui.center(location)
    except:
        return None

def qq_contacts_message(contacts_messages, search_box_path, input_box_path, cross_path):
    """
    循环发送消息
    :param contacts_messages: 联系人与发送消息所对应的excel表格
    :param search_box_path: 搜索框截图路径
    :param input_box_path: 消息发送框截图路径
    :param cross_path: 关闭按钮截图路径
    """
    # 程序暂停,留时间让用户打开应用(此处留3秒)
    time.sleep(3)
    # 循环遍历联系人_发送内容表格
    for _, row in contacts_messages.iterrows():
        # 每次发送前等待1秒,以免上一个窗口未关闭
        time.sleep(1)
        # 复制联系人到剪切板
        pyperclip.copy(row.iloc[0])
        # 识别搜索框并点击
        search_box_location = locate_image_on_screen(search_box_path)
        pyautogui.click(search_box_location)
        # 粘贴内容到搜索框
        pyautogui.hotkey('ctrl', 'v')
        # 下移一定位置,点击搜素结果,进入联系人界面
        x, y = search_box_location
        new_y = y + 110 # 此处下移110px,根据不同使用者,需要更改
        pyautogui.moveTo(x, new_y, duration=1)
        pyautogui.click(x, new_y)
        pyautogui.keyDown('enter')
        # 点击发送框,复制粘贴发送内容并发送
        time.sleep(2) # 点击发送框前,暂停2秒,以免图片识别时联系人界面还未打开
        input_box_location = locate_image_on_screen(input_box_path)
        x, y = input_box_location
        pyautogui.click(x, y+100)
        pyperclip.copy(row.iloc[1])
        pyautogui.hotkey('ctrl', 'v')
        pyautogui.hotkey('ctrl', 'enter')
        # 点击关闭按钮关闭聊天界面
        cross_location = locate_image_on_screen(cross_path)
        x, y = cross_location
        pyautogui.moveTo(x+60, y, duration=0.5)
        pyautogui.click(cross_location)
        pyautogui.keyDown('enter')


if __name__ == '__main__':
    # 联系人与发送内容对应excel表格地址
    contacts_messages_path = r'D:\Code\Utils\tools\files\qq_contacts_message.xlsx'
    # 搜索框截图地址
    search_box_path = r'D:\Code\Utils\tools\files\qq_search_box.png'
    # 输入框截图地址
    input_box_path = r'D:\Code\Utils\tools\files\qq_input_box.png'
    # 关闭按钮截图地址
    cross_path = r'D:\Code\Utils\tools\files\qq_cross.png'
    # 读取联系人_发送内容excel表格
    contacts_messages = pd.read_excel(contacts_messages_path)
    # 调用函数循环发送
    qq_contacts_message(contacts_messages, search_box_path, input_box_path, cross_path)

最后

上述代码还有许多需要改进的地方,例如当图像识别失败时,该程序或许会报错导致程序终止,读者可以进一步使用try…except…进行处理。

Python中实现QQ自动发送消息通常涉及到使用第三方库来连接到腾讯QQ消息服务器并执行操作。一个常见的方法是利用`py.qqbot`库,这是一个针对腾讯QQ机器人开发的小工具,支持群发、私聊等功能。 以下是一个简单的步骤概述: 1. **安装依赖**: 首先,你需要安装`py.qqbot`库。如果你还没有安装,可以通过pip来安装: ``` pip install py.qqbot ``` 2. **设置API**: 获取一个有效的QQ机器人API,这是发送消息的关键。你可以从官方文档获取API,通常需要注册一个账号并创建一个机器人。 3. **初始化机器人**: 使用API初始化QQBot实例: ```python from qqbot import QQBot, FriendMessage bot = QQBot(api_key='your_api_key', secret='your_secret') ``` 4. **编写发送消息的函数**: 定义一个函数来发送私信或群聊信息: ```python def send_message(recipient, message): if isinstance(recipient, str): # 如果是用户名,则发送私聊 friend_msg = FriendMessage(recipient=recipient, content=message) elif isinstance(recipient, list): # 如果是列表,则发送群聊 group_msg = GroupMessage(group_id=recipient[0], content=message) bot.send(friend_msg) or bot.send(group_msg) ``` 5. **调用发送消息函数**: 将你想发送的目标(用户名或群组ID)和消息传递给`send_message`函数: ```python send_message('对方的QQ号码', '你好,这是一条自动发送消息。') ``` 6. **运行机器人**: 最后,启动QQBot以开始监听消息并进行处理: ```python bot.run() ``` 记得替换`'your_api_key'`和`'your_secret'`为实际的API值。同时,请确保遵守腾讯的相关服务条款和隐私政策,尤其是对于自动化工具的使用可能有限制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值