一.pyautogui 库

pyautogui 是一个 Python 库,允许控制鼠标和键盘。可以通过它编写 Python 脚本来自动执行各种任务,例如点击按钮、输入文本、移动鼠标等。这个库非常适合用来编写自动化脚本来完成重复性的工作,比如网页表单填写、屏幕截图、GUI测试或者爬虫等。

pip install pyautogui

二.常用功能

1. 获取屏幕大小

import pyautogui

# 获取屏幕尺寸
screen_width, screen_height = pyautogui.size()
print("屏幕尺寸: %d x %s" % (screen_width, screen_height))

2.移动鼠标到屏幕中央

# 移动鼠标到屏幕中央
center_x, center_y = screen_width // 2, screen_height // 2
# duration 是移动时间, 默认为0, 这里在一秒内移动到中间
pyautogui.moveTo(center_x, center_y, duration=1)

3.单击鼠标

# 指定位置单击鼠标
pyautogui.click(button_x, button_y)

4.右键点击鼠标

pyautogui.click(button='right')

5.双击鼠标

# 指定位置双击鼠标
pyautogui.doubleClick(button_x, button_y)

6.键盘输入

# 输入文本
pyautogui.typewrite("Hello, world!")

7.按下按键

# 按下 enter 键
pyautogui.press('enter')

8.按下组合键

### 按下组合键 Ctrl+S
pyautogui.hotkey('ctrl', 's')

9.截取全屏并保存

# 截取全屏并保存
screenshot = pyautogui.screenshot()
screenshot.save("screenshot.png")

10.截取部分屏幕

# 截取部分屏幕
region = (0, 0, 300, 400)  # x, y, width, height
screenshot = pyautogui.screenshot(region=region)
screenshot.save("screenshot_region.png")

三.根据与图像寻找位置并双击

1. 寻找屏幕中的 button.png 的位置, 并双击

import pyautogui
import time

time.sleep(5)

# 查找图像在屏幕上的位置
button_location = pyautogui.locateOnScreen('button.png')

if button_location:
    # 获取图像的中心位置
    button_x, button_y = pyautogui.center(button_location)

    # 点击图像中心
    pyautogui.doubleClick(button_x, button_y)
else:
    print("按钮未找到")

2.对于找不到图片的问题

有时候图像的分辨率不合适, 或者匹配度不高, 可以增加 locateOnScreen() 的 confidence 参数为匹配度, 当匹配度高于指定值, 则匹配位置但是需要安装 OpenCV 的包

pip install opencv-python
import pyautogui
import time

time.sleep(5)

# 查找图像在屏幕上的位置
button_location = pyautogui.locateOnScreen('button.png', confidence=0.8)

if button_location:
    # 获取图像的中心位置
    button_x, button_y = pyautogui.center(button_location)

    # 点击图像中心
    pyautogui.doubleClick(button_x, button_y)
else:
    print("按钮未找到")

3.指定区域搜索图像

locateOnScreen() 还可以增加 region 参数, 在指定区域内寻找

# 定义屏幕区域 (x, y, width, height)
region = (100, 100, 800, 600)

button_location = pyautogui.locateOnScreen('button.png', region=region, confidence=0.8)

四.爬虫

我们常见的爬虫, 有分析网页的, 有分析后端接口的, 其实还有这种简单粗暴, 直接操作鼠标键盘进行重复性保存的, 比如有某个网站有一个图片组成的电子书, 需要点击按钮到下一页, 如果手动保存的需要一个个另存为, 但是因为下一页的位置是固定的, 每页图片出现的位置是固定的, 所以直接可以使用 pyautogui 代替我们进行手动的翻页和另存为。

1. 寻找按钮的位置

我们可以按照上面说的, 根据按钮的截图自动取寻找按钮的坐标, 但是精度不能保证, 或者相似的图标太多都是问题。

我们也可以先读出按钮的坐标, 如下所示, 在5秒内将鼠标移动到按钮位置, 然后等待打印就可以获取了

import pyautogui
import time

print("请在5秒内将鼠标移动到按钮位置...")
time.sleep(5)
button_position = pyautogui.position()

print(f"按钮位置: {button_position}")

2.爬虫

主要是进行另存为和翻页的功能

import pyautogui
import time

# 设置按钮的位置 (x, y), 就是下一页的位置
button_x, button_y = 1896, 598

# 等待操作完成,比如新页面加载或弹出框出现
time.sleep(3)

cnt = 1
# 387 为操作次数, 比如一个
while cnt < 387:
    # 点击按钮, 进行翻页
    if cnt > 1:
        pyautogui.click(button_x, button_y)
    
    # 等待翻页成功
    time.sleep(1)

    # 将鼠标移动到屏幕中间 (假设图片在屏幕中间)
    screen_width, screen_height = pyautogui.size()
    center_x, center_y = screen_width // 2, screen_height // 2
    pyautogui.moveTo(center_x, center_y)

    # 右键点击以弹出菜单
    pyautogui.click(button='right')

    # 等待菜单出现
    time.sleep(1)

    # 模拟按键操作(假设另存为是上下箭头后回车)
    # 需要调整按键序列以匹配实际情况
    # 下箭头(因为另存为按钮在第二的位置)
    pyautogui.press('down')  
    pyautogui.press('down')
    # 回车
    pyautogui.press('enter')

    # 等待另存为窗口出现
    time.sleep(2)

    # 模拟按键操作以输入文件名并保存
    file_path = '%d.jpg' % cnt
    pyautogui.typewrite(file_path)
    # 等待一秒键入成功
    time.sleep(1)
    # 这个按钮是将输入法中的文字键入地址框
    pyautogui.press('enter')
    
    # 这个按钮是指执行文件另存为时的保存按钮
    pyautogui.press('enter')

    # 等待保存和下载完成
    time.sleep(2)

    cnt += 1
05-16 10:59