python库之autopy

参考:https://blog.csdn.net/sandalphon4869/article/details/90272247

参数表示:
(x:float)
表示x是float类型

(x:float=0)
表示x是float类型,默认值是0

->float
返回一个float类型的数

一、安装的使用
1.介绍
主要用来模拟鼠标和键盘的点击操作。((๑•̀ㅂ•́)و✧脚本)

2.安装
pip install autopy
1
同样一条指令,昨天失败,今天成了。

3.使用
import autopy as at
1
3.官方文档
https://www.autopy.org/documentation/api-reference/
https://pypi.org/project/autopy/
https://github.com/autopilot-rs/autopy/#autopy-introduction-and-tutorial

二、屏幕at.screen
1.总结
函数 参数 作用
scale() ->float 返回一个坐标点(point)中含有几个像素点(pixel)
size() ->(float,float) 以元组的形式(x,y)返回屏幕的坐标点尺寸
is_point_visible(x:float,y:float) x横坐标,y纵坐标。是坐标点 返回布尔类型,如果这个坐标点在屏幕的边界内则True,否则False
get_color(x:float,y:float) ->(int,int,int) 以元组的形式(r,g,b)返回该坐标点的颜色
2.scale()以及坐标点和像素点关系
import autopy as at
print(at.screen.scale())

1.5

表示一个坐标点中含有1.5个像素点。


坐标点(point)和像素点(pixel):

如果得到坐标点,而我们想要获得像素点的话,就用坐标点乘以scale()。

3.size()
import autopy as at

scale=at.screen.scale()

print(at.screen.size())

(1280.0, 720.0)

这是屏幕的坐标点的尺寸

如果想要获得屏幕的像素点的尺寸

print(at.screen.size()[0]scale,at.screen.size()[1]scale)

1920.0 1080.0

1
2
3
4
5
6
7
8
9
10
11
4.is_point_visible(x:float,y:float)
import autopy as at

print(at.screen.size())

(1280.0, 720.0)

这是屏幕的坐标点的尺寸

print(at.screen.is_point_visible(1000,719))

True

print(at.screen.is_point_visible(1000,720))

False

print(at.screen.is_point_visible(1300,720))

False

1
2
3
4
5
6
7
8
9
10
11
12
和数组下标一样,(1280,720)是不能选择的,因为有(0,0).

5.get_color(x:float,y:float)
import autopy as at

print(at.screen.get_color(1,1))

(53, 53, 51)

1
2
3
4
三、鼠标at.mouse
1.总结
坐标体系:左上角(0,0)为原点

函数 参数 作用
move(x:float, y:float) x横坐标,y纵坐标,是坐标点 移动鼠标到位置(x,y)
smooth_move(x:float, y:float) x横坐标,y纵坐标,是坐标点 移动鼠标到位置(x,y)
location() ->(x:float, y:float) 以浮点数元组形式(x,y),返回鼠标当前位置的特殊的点。
坐标点=这个点/scale()/scale(),因为浮点数会有一点的误差
toggle(button: Button, down: bool) button是鼠标按键类型
down如果是True表示按下,是False表示放开 将某个键点击或者释放
click(button:Button, delay:float=0) button是鼠标按键类型
delay是一直按住这个键的时间,默认0秒 toggle()的集成,按button键多长时间,然后松开
2.move(x,y)
x和y的类型:可以是浮点数,也可以是整数(自动转化为浮点数)。

import autopy as at
at.mouse.move(100,100)
1
2
3.smooth_move(x,y)
import autopy as at
at.mouse.smooth_move(100,100)
1
2
但实际上,使用时会出现ValueError:Point out of bounds。

smooth_move(x,y)的机制是在周围选择一个点,然后从这个点向目标点移动(x,y)。所以问题是出在随机选择的点可能会超出边界。
根据测试,随机选择的点是有范围的。
???好像不对,只适用于此例

import autopy as at

boundX,boundY分别代表屏幕坐标点的范围

boundX,boundY=at.screen.size()[0],at.screen.size()[1]
print(at.screen.size())

(1536.0, 864.0)

dx,dy分别代表随机选择的范围

dx,dy=552,310
p=boundX-dx
q=boundY-dy

p,q分别是984.0,554.0

此时要移向屏幕右下角,如果p>984或者q>554,都会出现ValueError,只有p,q小于这个两个值才不会报错

at.mouse.move(p,q)
at.mouse.smooth_move(boundX-1,boundY-1)

4.location()
import autopy as at
scale=at.screen.scale()
at.mouse.move(100,200)

print(at.mouse.location())

(223.5, 448.5)

坐标点=这个点/scale()/scale(),因为浮点数会有一点的误差

print(at.mouse.location()[0]/scale/scale,at.mouse.location()[1]/scale/scale)

99.33333333333333 199.33333333333334

1
2
3
4
5
6
7
8
9
10
5.at.mouse.Button类型
Button含义 键
at.mouse.Button.LEFT 鼠标左键
at.mouse.Button.RIGHT 鼠标右键
at.mouse.Button.MIDDLE 鼠标中键
None值 None值在这里代表鼠标左键
6.toggle(button: Button, down: bool)
import autopy as at

at.mouse.toggle(None,True)

按住鼠标左键

at.mouse.toggle(None,False)

松开鼠标左键

1
2
3
4
5
6
PS:注意释放,要不然会电脑会一直按着那个键,直到你终止程序。

7.click(button:Button,delay:float=0)
import autopy as at
at.mouse.click(None)

点左键一下,然后松开

1
2
3
import autopy as at
at.mouse.click(at.mouse.Button.RIGHT)

点右键一下,然后松开

1
2
3
import autopy as at
at.mouse.click(at.mouse.Button.LEFT,3)

按住左键保持3秒,然后松开

1
2
3
PS:click()完了后会松开按键的。

四、键at.key
1.总结
函数 参数 作用
toggle(key: Code, down: bool, modifiers: List[Modifier], modifier_delay: float=0) key:键
down:是否按下
modifiers:修饰键的列表,表示一下按几个键
modifier_delay:按下修饰键的时间, 按下或者释放功能键
tap(key:Code, modifiers: List[Modifier], modifier_delay: float=0) key:键
modifiers:功能键的列表,表示一下按几个键
modifier_delay:不仅延迟时间按修饰键,按完后再延长时间松开按修饰键 toggle()的集成,但效果是按住按键保持2倍的modifier_dalay时间,之后再过modifier_delay时间执行后面的语句
type_string(string:str,wpm:float=0) string:要输入的字符串,即absd
wpm:words per minute,即每分钟多少个字的意思,默认0代表最快,其他就是数字越大打得越快 打出字母键和数字键
2.at.key.Code类型
(1)F
代码 含义
at.key.Code.F1
at.key.Code.F2
at.key.Code.F3
at.key.Code.F4
at.key.Code.F5
at.key.Code.F6
at.key.Code.F7
at.key.Code.F8
at.key.Code.F9
at.key.Code.F10
at.key.Code.F11
at.key.Code.F12
(2)控制键
代码 含义
at.key.Code.ALT
at.key.Code.SHIFT
at.key.Code.CONTROL
at.key.Code.META win功能键
at.key.Code.BACKSPACE
at.key.Code.DELETE
at.key.Code.CAPS_LOCK
at.key.Code.ESCAPE
at.key.Code.SPACE
at.key.Code.RETURN Enter回车键
(3)方向键
代码 含义
at.key.Code.HOME
at.key.Code.END
at.key.Code.PAGE_DOWN
at.key.Code.PAGE_UP
at.key.Code.UP_ARROW
at.key.Code.DOWN_ARROW
at.key.Code.RIGHT_ARROW
at.key.Code.LEFT_ARROW
3.at.key.Modifier键
只是从at.key.Code里挑了四个出来作为修饰键

代码 含义
at.key.Modifier.ALT
at.key.Modifier.SHIFT
at.key.Modifier.CONTROL
at.key.Modifier.META win功能键
4.toggle(key: Code, down: bool, modifiers: List[Modifier], modifier_delay: float=0)
import autopy as at

at.key.toggle(at.key.Code.UP_ARROW,True,[])
at.key.toggle(at.key.Code.UP_ARROW,False,[])

按 方向键↑,向上移动一下

1
2
3
4
5
import autopy as at
at.key.toggle(at.key.Code.CONTROL,True,[at.key.Modifier.CONTROL],8)

print(123)

当at.key.toggle(at.key.Code.CONTROL,True,[at.key.Modifier.CONTROL],8)执行并过了8秒才执行这句,相当于sleep(8)

at.key.toggle(at.key.Code.CONTROL,False,[at.key.Modifier.CONTROL])

control键保持按下了8秒,关闭的时候直接关就行了

1
2
3
4
5
6
7
8
PS:注意释放,要不然会电脑会一直按着那个修饰键,直到你终止程序。

5.tap(key:Code, modifiers: List[Modifier], delay: float=0)
import autopy as at
at.key.tap(at.key.Code.CONTROL,[at.key.Modifier.CONTROL],5)

按住CONTROL键保持了10秒

print(123)

之后又过了5秒才输出123

1
2
3
4
5
6.at.key.type_string(string:str,wpm:float=0)
import autopy as at
at.key.type_string(‘Hello123’,0)

Hello123

快速地打出

1
2
3
4
五、弹窗at.alert
函数:
autopy.alert.alert(msg: str, title: str=None, default_button: str=None, cancel_button: str=None)

参数 含义
msg 弹窗信息内容
title 弹窗信息标题
default_button 无法设置。
由于Win32 API的限制,Windows当前替换 default_button为“确定”和cancel_button(如果给定)替换为“取消”。
cancel_button 如果cancel_button未给出,则仅显示默认按钮。无法设置。
由于Win32 API的限制,Windows当前替换 default_button为“确定”和cancel_button(如果给定)替换为“取消”。
import autopy as at
at.alert.alert(‘hello’,’python world’,’1′,’2′)
1
2

六、颜色at.color
函数 参数 返回值 作用
autopy.color.rgb_to_hex(red:int,green:int,blue:int ) r, g和b必须在0 – 255范围内 →返回一个十六进制 返回给定RGB元组的十六进制值
autopy.color.hex_to_rgb(hex:int ) 一个十六进制数 →元组(int,int,int) 返回等于给定RGB十六进制值的RGB整数值的元组。
(r, g, b)的r,g,b范围是0 – 255。
import autopy as at
print(at.color.rgb_to_hex(100,100,100))

6579300

print(at.color.hex_to_rgb(6579300))

(100, 100, 100)

1
2
3
4
5
七、位图
1.bitmap类函数
save()

import autopy as at

a=at.bitmap.capture_screen(None)
str=’some’

相对路径+文件名字

a.save(str,’png’)

在本文件目录下生成了一个名为some的png图片

1
2
3
4
5
6
7
import autopy as at

a=at.bitmap.capture_screen(None)
str=’C:\Users\Administrator\Desktop\some’

绝对路径+文件名字

a.save(str,’png’)
1
2
3
4
5
6
2.函数
函数:
autopy.bitmap.capture_screen( ((x1,y1),(x2,y2)) )
→ autopy.bitmap.Bitmap

如果有给定的矩形坐标,那么截取给定的部分。如果是None,则截取整个屏幕。

八、小程序
1.疯狂点击
在程序启动3秒后,将狂点左键20次(小游戏)

import autopy as at
import time

scale=at.screen.scale()

print(at.mouse.location())

坐标点=这个点/scale()/scale(),因为浮点数会有一点的误差

time.sleep(3)

for i in range(20):
at.mouse.click(at.mouse.Button.LEFT)
1
2
3
4
5
6
7
8
9
10
11
12
在程序启动3秒后,将间隔1秒点左键20次(适合刷新)

import autopy as at
import time

scale=at.screen.scale()

print(at.mouse.location())

坐标点=这个点/scale()/scale(),因为浮点数会有一点的误差

time.sleep(3)

for i in range(20):
at.mouse.click(at.mouse.Button.LEFT,1)