毕节市网站建设_网站建设公司_版式布局_seo优化
2025/12/30 12:53:15 网站建设 项目流程

PyGUI

环境安装

下载pyautogui模块

pip install pyautogui

- 在Windows上,不需要安装其他模块
- 在OSX上,运行 sudo pip3 install pyobjc-framework-Quartz, sudo pip3 install pyobjc-core, 然后 sudo pip3 install pyobjc。
- Linux 上, 运行 sudo pip3 install python3-xlib, sudo apt-get install scrot, sudo apt-get install python3-tk, 以及sudo apt-get install python3-dev(Scrot是PyAutoGUI使用的屏幕快照程序)。在这些依赖安装后,运行 pip install pyautogui

基础命令

import pyauwogui# 获取屏幕分辨率
screenWidth, screenHeight = pyautogui.size()
print(f"屏幕分辨率: {screenWidth}x{screenHeight}")# 获取当前鼠标位置
currentMouseX, currentMouseY = pyautogui.position()
print(f"当前鼠标位置: ({currentMouseX}, {currentMouseY})")# 移动鼠标到屏幕中央
pyautogui.moveTo(screenWidth / 2, screenHeight / 2, duration=1)

鼠标操作

移动

move(x, y, duration) 函数用于相对当前位置移动鼠标 即当前位置+(x,y)等价于 moveRel,实际上 pyautogui.move 是 moveRel 的别名

moveTo(x, y, duration) 函数用于移动鼠标到指定位置 即(x,y)

moveRel(xOffset, yOffset, duration) 函数用于相对当前位置移动鼠标 即当前位置+(xOffset,yOffset)

def draw_square():"""绘制一个正方形:return:"""for i in range(4):pyautogui.move(100, 0, duration=0.25)  # 向右移动100像素pyautogui.move(0, 100, duration=0.25)  # 向下移动100像素pyautogui.move(-100, 0, duration=0.25)  # 向左移动100像素pyautogui.move(0, -100, duration=0.25)  # 向上移动100像素

点击

pyautogui.click()

# 鼠标点击操作
pyautogui.click(x=100, y=100, button='left')  # 在坐标(100, 100)处点击左键 其中的button参数可以是'left'(左键)、'right'(右键)或'middle'(中键)
pyautogui.click(x=200, y=200, button='right')  # 在坐标(200, 200)处点击右键
参数 类型 说明 默认值
x int (可选) 点击位置的 x 坐标(不指定则使用当前鼠标位置)
y int (可选) 点击位置的 y 坐标(不指定则使用当前鼠标位置)
button str 鼠标按钮:'left'(左键)、'right'(右键)或 'middle'(中键) 'left'
clicks int 点击次数 1
interval float 连续点击之间的时间间隔(秒) 0
duration float 鼠标移动到点击位置所需的时间(秒) 0
tween function (可选) 鼠标移动的缓动函数 linear
logScreenshot bool (可选) 是否在点击时截取屏幕截图 False
_pause bool (可选) 点击后是否暂停脚本执行 True
pyautogui.mouseDown(x=1700, y=1300, button='left')  # 按下左键但不释放
pyautogui.mouseUp(x=1900, y=1300, button='left')    # 释放左键
pyautogui.doubleClick(x=1600, y=500, button='left')  # 在坐标(1600, 500)处双击左键
pyautogui.leftClick(x=1500, y=500)          # 在坐标(1500, 500)处单击左键
pyautogui.rightClick(x=1400, y=500)         # 在坐标(1400, 500)处单击右键
pyautogui.middleClick(x=1300, y=500)        # 在坐标(1300, 500)处单击中键

拖动

drag(xOffset, yOffset, duration) 函数用于相对当前位置拖拽鼠标 即当前位置+(xOffset,yOffset)
dragTo(x, y, duration) 函数用于拖拽鼠标到指定位置 即(x,y)
dragRel(xOffset, yOffset, duration) 函数用于相对当前位置拖拽鼠标 即当前位置+(xOffset,yOffset)

pyautogui.drag(100, 0, duration=0.5)  # 向右拖拽100像素
pyautogui.dragTo(200, 200, duration=0.5)  # 拖拽到坐标(200, 200)
pyautogui.dragRel(0, 100, duration=0.5)  # 向下拖拽100像素def draw_square_drag():"""绘制一个正方形(拖拽):return:"""time.sleep(2)pyautogui.click()  # 点击以确保窗口处于活动状态distance = 200while distance > 0:pyautogui.dragRel(distance, 0, duration=0.1, button='left')  # 向右拖拽distance -= 5pyautogui.dragRel(0, distance, duration=0.1, button='left')   # 向下拖拽pyautogui.dragRel(-distance, 0, duration=0.1, button='left')  # 向左拖拽distance -= 5pyautogui.dragRel(0, -distance, duration=0.1, button='left')  # 向上拖拽

滚动

pyautogui.scroll(500) # 正值表示向上滚动 负值表示向下滚动

# 将鼠标移动到屏幕中央(假设中央有可滚动区域)
screenWidth, screenHeight = pyautogui.size()
pyautogui.moveTo(screenWidth // 2, screenHeight // 2)
time.sleep(1)  # 等待窗口响应
pyautogui.scroll(500)  # 正值表示向上滚动 负值表示向下滚动

处理屏幕

你的GUI自动化程序没有必要盲目地点击和输入。pyautogui 拥有屏幕快照的功能,可以根据当前屏幕的内容创建图形文件。

  • 注意:
    • 在Linux计算机上,需要安装scrot程序,才能在pyautogui中使用屏幕快照功能。在终端窗口中,执行sudoapt-get install scrot,安装该程序。如果你使用Windows或 OSX,就跳过这一步。

pyautogui.screenshot() 获取屏幕快照

im = pyautogui.screenshot()	# 获取屏幕快照
im.save('screenshot.png')  # 保存屏幕快照到指定位置

pyautogui.pixelMatchesColor(x, y, expectedRGBColor, tolerance=0) 函数用于检查指定坐标处的像素颜色是否与预期颜色匹配。

参数 类型 说明 默认值
x int 要检查像素的 x 坐标 必填
y int 要检查像素的 y 坐标 必填
expectedRGBColor tuplelist 预期的 RGB 颜色值,格式为 (R, G, B),每个分量范围 0-255 必填
tolerance int 颜色匹配的容差值 0

返回值

  • 类型: bool
  • 说明: 如果指定坐标处的像素颜色与预期颜色匹配(在容差范围内)则返回 True,否则返回 False
im = pyautogui.screenshot()	# 获取屏幕快照
# im.save('screenshot.png')  # 保存屏幕快照到指定位置
color = im.getpixel((500, 100))  # 获取屏幕快照坐标(100, 100)处的像素颜色
print(color)	# 输出RGB值(51, 56, 65)
result = pyautogui.pixelMatchesColor(500, 100, color)  # 检查当前页面坐标(500, 100)处的像素颜色是否与获取的颜色匹配
print(result)	# 相同返回True,不同返回False

图像识别

  • opencv简介

    • Opencv(Open Source Computer Vision Library)是一个基于开源发行的跨平台计算机视觉库,它实现了图像处理和计算机视觉方面的很多通用算法,已成为计算机视觉领域最有力的研究工具。

      在这里我们要区分两个概念——图像处理和计算机视觉的区别:

    • 图像处理侧重于"处理"图像--如增强,还原,去噪,分割等等。

    • 而计算机视觉重点在于使用计算机来模拟人的视觉,因此模拟才是计算机视觉领域的最终目标。

  • opencv安装

    • pip install opencv-python

基于图像识别定位腾讯会议加入会议按钮并点击案例

# -*- coding: utf-8 -*-
# @Time    : 2025/12/30 11:41
# @Author  : 范晨伟
# @Content : 实现的内容:
# @File    : 图像识别定位腾讯会议.py
import cv2
import time
import pyautoguitime.sleep(2)
im = pyautogui.screenshot()
im.save('screen.png')# 读取截图和模板图像
screen = cv2.imread('screen.png')
joinMeeting = cv2.imread('joinMeeting.png')	 # 提前将目标定位元素截图保存
# 在屏幕截图中查找加入会议按钮图像,定位其位置
result = cv2.matchTemplate(screen, joinMeeting, cv2.TM_CCOEFF_NORMED)
# result是一个二维数组,表示每个位置的匹配程度,值越大表示匹配程度越高,范围在0到1之间,列表中最大值元素的位置就是对比相似度最高的图片【左上角】位置
print(result)# minMaxLoc函数用于获取二维数组中的最小值和最大值及其对应的位置,返回一个元组,包含最小值、最大值、最小值位置和最大值位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
print(min_val, max_val, min_loc, max_loc)  # -0.4375506341457367 0.9999998211860657 (458, 708) (600, 311)
# max_loc即为加入会议按钮图像在屏幕截图中的左上角位置
# 计算加入会议按钮图像的中心位置
x = int(max_loc[0]) + int(joinMeeting.shape[1] / 2)
y = int(max_loc[1]) + int(joinMeeting.shape[0] / 2)# 移动鼠标到加入会议按钮位置并点击
time.sleep(1)
pyautogui.moveTo(x, y, duration=0.5)
pyautogui.click()

键盘操作

文字输入

pyautogui.typewrite()

pyautogui.write()

注: pyautogui.typewrite 和 pyautogui.write 没有区别,write 只是 typewrite 的新名字。

import pyautogui
import timetime.sleep(2)
pyautogui.click(800, 300)  # 点击以确保输入焦点在正确的位置
time.sleep(2)
# pyautogui.typewrite('Hello World!', interval=0.1)  # 另一种模拟键盘输入字符串的方法,每个字符间隔0.1秒
# pyautogui.typewrite 和 pyautogui.write 没有区别,write 只是 typewrite 的新名字。
pyautogui.write('Hello World!', interval=0.1)  # 模拟键盘输入字符串,每个字符间隔0.1秒
pyautogui.press('enter')  # 模拟按下回车键
pyautogui.write('This is an automated message.', interval=0.1)

按下和释放键盘

pyautogui.keyDown()和pyautogui.keyUp()将向计算机发送虚拟的按键和释放

pyautogui.press()是相当于调用这两个函数,模拟完成一次完成的击键

import pyautogui
import timetime.sleep(2)
pyautogui.keyDown('shift')  # 按下Shift键
pyautogui.press('4')        # 按下4键
pyautogui.keyUp('shift')    # 释放Shift键,结果是输入了美元符号$

对于复制粘贴这种常用的热键,如果通过上述方式按下释放,需要写的代码太多且繁琐,我们还可以用pyautogui.hotkey()函数来为我们实现多种组合键

pyautogui.hotkey()函数用于模拟按下多个键的组合键操作。它接受任意数量的字符串参数,每个参数表示一个键。函数会依次按下这些键,然后依次释放它们,从而实现组合键的效果。
参数说明:

  • *args: 任意数量的字符串参数,每个参数表示一个键。例如,'ctrl'、'shift'、'a'等。
  • 使用示例:
    pyautogui.hotkey('ctrl', 'c') # 模拟按下Ctrl+C组合键,复制选中的内容
    pyautogui.hotkey('alt', 'tab') # 模拟按下Alt+Tab组合键,切换窗口
    pyautogui.hotkey('ctrl', 'shift', 'n') # 模拟按下Ctrl+Shift+N组合键,在浏览器中打开新窗口
    注意事项:
    • 确保在调用hotkey()函数之前,目标应用程序或文本框已经获得了输入焦点,否则组合键操作可能不会生效。
    • hotkey()函数会自动处理按下和释放键的顺序,无需手动调用keyDown()和keyUp()函数。
import pyautogui
import timepyautogui.hotkey('ctrl', 'a')  # 全选文本
pyautogui.hotkey('ctrl', 'c')  # 复制选中的文本
time.sleep(5)
pyautogui.hotkey('ctrl', 'v')  # 粘贴文本
pyautogui.press('enter')  # 按下回车键
pyautogui.write(' - This text was pasted using PyAutoGUI.', interval=0.1)

小案例:微信自动化操作

# -*- coding: utf-8 -*-
# @Time    : 2025/12/30 12:36
# @Author  : 范晨伟
# @Content : 实现的内容:
# @File    : 微信自动化操作.py
import pyautogui
import time
import pyperclip
import cv2def send_wechat_message(contact_name, message):"""通过微信发送消息给指定联系人:param contact_name: 微信联系人名称:param message: 要发送的消息内容:return:"""# 点击搜索框x, y = locate_and_click()pyautogui.click(x, y)  # 根据实际位置调整坐标time.sleep(1)# 输入联系人名称pyperclip.copy(contact_name)pyautogui.hotkey('ctrl', 'v')  # 粘贴联系人名称time.sleep(1)pyautogui.press('enter')  # 选择联系人time.sleep(2)# 定位到消息输入框并点击pyautogui.click(780, 760)# 输入消息内容pyperclip.copy(message)  # 使用剪贴板复制消息内容,避免中文输入问题pyautogui.hotkey('ctrl', 'v')  # 粘贴消息内容time.sleep(1)# 发送消息pyautogui.press('enter')time.sleep(1)# 可选:关闭微信窗口# pyautogui.hotkey('alt', 'f4')def locate_and_click():"""定位屏幕上的图像并点击:return:"""im = pyautogui.screenshot()im.save('wxScreen.png')screen = cv2.imread('wxScreen.png')search_icon = cv2.imread('wxSearch.png')result = cv2.matchTemplate(screen, search_icon, cv2.TM_CCOEFF_NORMED)min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)x = int(max_loc[0]) + int(search_icon.shape[1] / 2)y = int(max_loc[1]) + int(search_icon.shape[0] / 2)return x, yif __name__ == '__main__':time.sleep(2)send_wechat_message('传输', 'GUI测试数据')

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询