淘先锋技术网

首页 1 2 3 4 5 6 7

库的安装

这里需要python的pautogui库

PyAutoGUI依赖于pyscreeze、pymsgbox、pytweening,上述命令会自动安装这3个库。安装完成后可以发现,在site-packages\pyautogui有6个文件,名字带java、osx、win、x11的是在不同平台的实现方案,再在__init__.py和__main__.py中检测当前系统平台进行封装。

可以用命令pip install pyautogui 安装

pyautogui自动打字——typewrite(不支持中文)

typewrite可以在光标停留位置输入字符串

如果是中文需要配合pyparperclip使用(pyparperclip.copy())

import pyautogui
pyautogui.typewrite('str',interval)#第二个参数是打字间隔时间,可以是数字,也可以这么写
pyautogui.typewrite('str',interval=interval#后面的interval表示具体的数字

typewrite也可以模拟键盘输入,即输入像esc,唱跳rap篮球(ctrl)之类的特殊建

pyautogui.typewrite(['ctrl'])#这里就类似下面这个函数、
pyautogui.press('ctrl')
#还可以这样
pyautogui.keyDown('ctrl')#按下唱跳rap篮球
pyautogui.keyUp('ctrl')#松开唱跳rap篮球

那么怎么按下组合键呢(ctrl+c)

更具前面所学

pyautogui.keyDown('ctrl')
pyautogui.keyDown('c')
pyautogui.keyUp('ctrl')
pyautogui.keyUp('c')

但是这样效率太低了,要四行代码😭,能不能简化一些呢

组合键函数——hotkey

pyautogui.hotkey("ctrl","c")

这样一行代码就实现了组合键功能🙊

有效字符如下

['\t', '\n', '\r', '', '!', '"', '#', '$', '%', '&', "'", '(',

')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7',

'8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`',

'a', 'b', 'c', 'd', 'e','f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',

'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',

'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace',

'browserback', 'browserfavorites', 'browserforward', 'browserhome',

'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear',

'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete',

'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10',

'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20',

'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9',

'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja',

'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail',

'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack',

'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6',

'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn',

'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn',

'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator',

'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab',

'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen',

'command', 'option', 'optionleft', 'optionright']

关于屏幕

屏幕截图

调用screenshot()将返回Image对象(有关详细信息,请参阅Pillow或PIL模块文档)。传递文件名字符串会将屏幕截图保存到文件中,并将其作为Image对象返回。

 import pyautogui
 im1 = pyautogui.screenshot()
 im1.save('my_screenshot.png')
#也可以这样
 im2 = pyautogui.screenshot('my_screenshot.png')

但是这样速度会有些慢,所以可以指定一个区域

im=pyautogui.screenshot('image_name',region=(0,0,114,514))

region中的0,0是起始坐标(屏幕坐标是以屏幕左上角为原点,向下为正方向建立y轴,向右建立x轴,后两个参数分别是宽和高

屏幕信息

kuan,gao=pyautogui.size()#获取屏幕的基本信息(宽,高)像素
pyautogui.onScreen(坐标)#判断坐标是否在屏幕上

关于鼠标

获取鼠标光标位置

import pyautogui as py
py.position()#返回光标位置坐标

移动光标

import pyautogui as py
py.moveTo(坐标,duration=time)#光标移动至指定坐标,时间间隔为time
#那如果不知道坐标呢
py.moveRel(相对位置,duration)

鼠标拖动

与移动光标类似

import pyautogui as py
py.dageTo()
py.dagRel()

参数与moveTo相同,多了一个button参数来确定左键left右键right滚轮键middle

当然也可以这样

import pyautogui as py
py.mouseDown()
py.mouseUp(button=" ",坐标)#移动到坐标位置松开鼠标
或者
py.mouseDown(button="right")
py.moveTO(坐标)
py.mouseUp(button="right")

鼠标点击

click函数,用法如下

import pyautogui as py
py.click(button="",clicks=点击次数,interval=相隔时间)

当然也可以

import pyautogui as py
py.doubleclick()
#and
py.tripleclick()

实际过程中往往找不到坐标,而是更具icon图像点击

鼠标寻找图标位置

import pyautogui as py
a=py.locatOnScreen('image_name')#通过文件中的图片寻找坐标,输出一个元组,分别是left,top,wideth,highth
b=py.center(a)#寻找图像中心坐标

然鹅,现实中可能会遇到各种情况导致寻找图像失败

比如截图浏览器图标,希望它自动找到这个icon,但是如果移动浏览器位置,背景的像素点可能要变化

这个时候,参数confidence就非常有用了

import pyautogui as py
py.locatOnScreen("image_names",confidence=0.9)#给程序0.9的自信😂,忽略0.1的误差

添加参数grayscale=True给locate函数以提供轻微的加速(大约30%-ish)。这会使图像和屏幕截图中的颜色去饱和,从而加快定位速度,但可能导致误判。

鼠标滚轮

import pyautogui as py
py.scroll(10)#向上划10个像素

其它

消息框

alert()函数

import pyautogui as py
value=py.alert(text="str",title="title",button="ok")
>>>value

value会显示按钮内容(如果他按了)

很显然,这个好像按不按按钮意义不大,因为只能设置一个按钮

confirm()函数就可以解决这个问题

import pyautogui as py
py.confirm(text="hello",title="hello world",buttons=["点赞","打赏","收藏 "])

同样返回值是被点击的按钮的值、

prompt()函数

有个输入框

import pyautogui as py
py.prompt(text="",title="",defult="")

只有两个按钮,点击ok,返回输入框的值,点击cancel返回none