前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用 python 做一个消息轰炸机

用 python 做一个消息轰炸机

作者头像
叶子陪你玩
发布2021-09-15 10:45:22
1.6K0
发布2021-09-15 10:45:22
举报

之前python有趣的案例集3有发一个消息轰炸机的视频,这种属于python自动控制,原理就说利用程序控制键盘,鼠标等。

比如你可以让鼠标移动到你设定的位置,也可以让键盘输入你想输入的内容,也可以控制鼠标左键还是右键点击。

简单版-轰炸机

需要手动先移动鼠标到输入区域,记录当前坐标,然后移动鼠标到按钮区域,之后只要重复这个过程,不断发送内容就可以了,如果想要发送不同的内容,可以提前组织好内容,或者放到文件中,不断读取发送。

代码语言:javascript
复制
import pyautogui
import time
import pyperclip as pc
pyautogui.FAILSAFE = False

# 手动移动到空白发送区域
time.sleep(2)
blank_pos = pyautogui.position()
# 手动移动到按钮区域
time.sleep(2)
button_center_pos = pyautogui.position()

# 等2s后开始
time.sleep(2)

# 发送5次你好
for i in range(5):
    # 移动空白位置
    pyautogui.move(blank_pos,duration=0.2)
    # 点击鼠标左键,准备输入内容
    pyautogui.click(blank_pos,button='left')
    # 发送中文得用复制粘贴的方法
    pc.copy('你好') # 复制
    pyautogui.hotkey('ctrl', 'v') # 贴
    # 输入内容 不能输入中文
    # pyautogui.write("hello", interval=0.25)
    
    # 移动按钮位置
    pyautogui.move(button_center_pos,duration=0.2)
    # 点击鼠标左键,发送内容
    pyautogui.click(button_center_pos,button='left')

通用版-轰炸机

前面的简单版缺点是需要手动移动,且界面需要固定,而通用版通过使用图像识别,利用opencv的模板批判方法,找到按钮位置,然后通过按钮位置偏移一定距离,估算空白区域位置。

提前截取按钮保存在程序相同文件夹位置,用于匹配。

代码语言:javascript
复制
import pyautogui
import cv2
import pyperclip as pc

pyautogui.FAILSAFE = False
# print(pyautogui.size())
while True:
    # 自动截图
    img = pyautogui.screenshot('crop.png')
    # 加载按钮图片
    tpl = cv2.imread("send.png")
    # 加载截图
    target = cv2.imread("crop.png")
    # 模板匹配,找到最匹配的位置
    result = cv2.matchTemplate(target, tpl, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)

    if max_val > 0.7:
        tl = max_loc  # 匹配图像的左上角位置坐标
        # 获取按钮的宽和高
        th, tw = tpl.shape[:2]
        # 计算匹配图像的右下角坐标
        br = (tl[0] + tw, tl[1] + th)
        # 画出矩形,圈出按钮
        cv2.rectangle(target, tl, br, (0, 0, 255), 2)
        # 计算按钮的中心位置,画出圆形,圈出按钮的中心位置
        button_center_pos = (tl[0] + tw // 2, tl[1] + th // 2)
        # 计算空白输入区域位置,画出圆形,圈出按钮上的空白输入位置
        blank_pos = (button_center_pos[0], button_center_pos[1] - 80)
        cv2.circle(target, (tl[0] + tw // 2, tl[1] + th // 2), 10, (0, 0, 255), 2)
        cv2.circle(target, blank_pos, 10, (0, 0, 255), 2)
        cv2.imshow("match", target)
    if cv2.waitKey(0) == ord('1'):
        cv2.destroyAllWindows()
        break

# 发送5次你好
for i in range(5):
    # 移动空白位置
    pyautogui.move(blank_pos, duration=0.2)
    # 点击鼠标左键,准备输入内容
    pyautogui.click(blank_pos, button='left')
    # 发送中文得用复制粘贴的方法
    pc.copy('你好')  # 复制
    pyautogui.hotkey('ctrl', 'v')  # 贴
    # 输入内容 不能输入中文
    # pyautogui.write("hello", interval=0.25)

    # 移动按钮位置
    pyautogui.move(button_center_pos, duration=0.2)
    # 点击鼠标左键,发送内容
    pyautogui.click(button_center_pos, button='left')

(全文完)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叶子陪你玩编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档