脚本-QQ批量发送消息(图片和文字)

目录

代码

代码功能详解

注意事项

致谢

代码

import io
import traceback
import win32clipboard
import pyautogui
import pyperclip
import win32gui  # 替换为pywin32的正确模块名
import pandas as pd
import time
from PIL import Image


class QQAutoMessage:
    def __init__(self):

        self.contacts_file = r".\students.xlsx"  # Excel表位置
        self.qq_search_pos = (191, 56)  # 搜索框坐标
        self.contact_pos = (600, 857)  # 聊天输入框坐标
        self.first_contact_pos = (244, 155)  # 第一个符合条件的坐标
        self.send_delay = 1
        self.pictures = [r"test.png"]  # 图片路径列表

    def load_file(self):
        return pd.read_excel(self.contacts_file, engine='openpyxl')

    def find_qq_window(self):
        hwnd = win32gui.FindWindow(None, "QQ")
        if hwnd == 0:
            raise Exception("未检测到QQ主窗口,请确认已登录")
        return hwnd

    def search_contact(self, student_id):
        pyautogui.moveTo(self.qq_search_pos)
        pyautogui.click()
        time.sleep(0.5)

        pyautogui.hotkey('ctrl', 'a')
        pyautogui.press('backspace')
        time.sleep(0.5)

        pyautogui.typewrite(str(student_id))
        time.sleep(1)
        pyautogui.moveTo(self.first_contact_pos)
        pyautogui.doubleClick()


    def send_message(self, message):
        time.sleep(1)

        pyautogui.moveTo(self.contact_pos)
        pyautogui.click()
        time.sleep(2)

        pyperclip.copy(message)
        pyautogui.hotkey('ctrl', 'v')
        time.sleep(1)
        pyautogui.press('enter')

        # send pictures ?
        if self.pictures:
            for picture_path in self.pictures:
                copy_image_to_clipboard(picture_path)
                pyautogui.hotkey('ctrl', 'v')
                time.sleep(1)
                pyautogui.press('enter')


        return True

    def run(self):
        contacts = self.load_file()

        qq_hwnd = self.find_qq_window()
        if qq_hwnd == 0:
            exit(-1)

        # begin send message
        for index, row in contacts.iterrows():
            try:
                self.search_contact(row['学号'])
                success = self.send_message(row['消息内容'])
                if success:
                    print(f"成功发送给:{row['姓名']}(内容:{row['消息内容']}...)")
                else:
                    print(f"发送失败:{row['姓名']}")

                time.sleep(self.send_delay)

            except Exception as e:
                traceback.print_exc()
                print(e)
                continue


def copy_image_to_clipboard(image_path):
    image = Image.open(image_path)
    output = io.BytesIO()
    image.convert("RGB").save(output, "BMP")
    data = output.getvalue()[14:]
    output.close()
    win32clipboard.OpenClipboard()
    try:
        win32clipboard.EmptyClipboard()
        win32clipboard.SetClipboardData(win32clipboard.CF_DIB, data)
    finally:
        win32clipboard.CloseClipboard()


if __name__ == "__main__":
    bot = QQAutoMessage()
    bot.run()

代码功能详解

加载Excel文件,根据文件中的学号在QQ搜索框中进行搜索,并选择第一个符合搜索条件的对象进行对话,发送聊天文本,并发送图片。

注意事项

  1. 需要安装对应的包
  2. 需要修改文件中的变量内容:contacts_file、pictures
  3. 合理修改以下变量:qq_search_pos、contact_pos、first_contact_pos【这部分内容分别指代QQ搜索框的坐标、聊天文字输入框的坐标、搜索到的第一个符合条件的坐标,本人选择的是将QQ界面最大化】
  4. 需要创建一个Excel表格,表格形式如下:
姓名学号发送文字
张三00000000今晚有约吗?

致谢

我亲爱的女朋友给了我灵感和动力。

羡林i提供的复制图片到剪切板的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值