之前python有趣的案例集3有发一个消息轰炸机的视频,这种属于python自动控制,原理就说利用程序控制键盘,鼠标等。
比如你可以让鼠标移动到你设定的位置,也可以让键盘输入你想输入的内容,也可以控制鼠标左键还是右键点击。
简单版-轰炸机
需要手动先移动鼠标到输入区域,记录当前坐标,然后移动鼠标到按钮区域,之后只要重复这个过程,不断发送内容就可以了,如果想要发送不同的内容,可以提前组织好内容,或者放到文件中,不断读取发送。
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的模板批判方法,找到按钮位置,然后通过按钮位置偏移一定距离,估算空白区域位置。
提前截取按钮保存在程序相同文件夹位置,用于匹配。
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')
(全文完)