python-pyautogui控制鼠标键盘自动操作

第一步:

pip install pyautogui

安装pyautogui库。

第二步:

基本使用

screenWidth, screenHeight=pyautogui.size()# 屏幕尺寸mouseX, mouseY=pyautogui.position()# 返回当前鼠标位置,注意坐标系统中左上方是(0, 0)

为了保持用户可以随时干预鼠标键盘的动作,比较好的方法是添加停顿,或者强制结束,否则想停了鼠标还一直在晃就会失控,下面是两种对应的设置

pyautogui.PAUSE=1.5# 每个函数执行后停顿1.5秒

pyautogui.FAILSAFE=True# 鼠标移到左上角会触发FailSafeException,因此快速移动鼠标到左上角也可以停止

鼠标操作

移动

w, h=pyautogui.size()

pyautogui.moveTo(w/2, h/2)# 基本移动

pyautogui.moveTo(100,200, duration=2)# 移动过程持续2s完成

pyautogui.moveTo(None,500)# X方向不变,Y方向移动到500

pyautogui.moveRel(-40,500)# 相对位置移动

拖动

# 点击+向下拖动

pyautogui.click(941,34, button='left')pyautogui.dragRel(0,100, button='left', duration=5)

点击

pyautogui.click(300,400, button='right')# 包含了move的点击,右键

pyautogui.click(clicks=2, interval=0.25)# 双击,间隔0.25s

滚轮

pyautogui.scroll(-10)

键盘操作

输入文字

点击对话框输入文字即可,不过中文好像不行

pyautogui.click(1279,374)pyautogui.typewrite('hello world!')

精确控制键盘

以下是手动输入中文的方法

pyautogui.press('shift')# 切换输入法的中英文

pyautogui.press(['#',' '])# press 可以对单个字符或者列表进行操作

pyautogui.press(['x','i','a','o'])

pyautogui.press(['y','u'])

pyautogui.press(['w','e','i'])

pyautogui.press(['l','a','n'])

pyautogui.press(' ')

hotKey

pyautogui.hotkey('shift','a')# 可以使用组合键,本质上是

'''pyautogui.keyDown('shift')

pyautogui.keyDown('a')

pyautogui.keyUp('shift')

pyautogui.keyUp('a')'''

消息弹窗函数

如果你需要消息弹窗,通过单击OK暂停程序,或者向用户显示一些信息,消息弹窗函数就会有类似JavaScript的功能:

In [ ]:

pyautogui.alert('这个消息弹窗是文字+OK按钮')

pyautogui.confirm('这个消息弹窗是文字+OK+Cancel按钮')

pyautogui.prompt('这个消息弹窗是让用户输入字符串,单击OK')

Out[ ]:

print(pyautogui.alert('这个消息弹窗是文字+OK按钮'))

print(pyautogui.confirm('这个消息弹窗是文字+OK+Cancel按钮'))

str1 = pyautogui.confirm(text='1-10', title='test', buttons=range(10))

print(str1)

str1 =pyautogui.prompt('这个消息弹窗是让用户输入字符串,单击OK')

print(str1)

str1 = pyautogui.password(text='密码', title='填', default='123', mask='*')

print(str1)

在prompt()函数中,如果用户什么都不输入,就会返回None。

截屏函数

PyAutoGUI用Pillow/PIL库实现图片相关的识别和操作。

在Linux里面,你必须执行sudo apt-get install scrot来使用截屏特性。

In [ ]:

#  返回一个Pillow/PIL的Image对象pyautogui.screenshot()pyautogui.screenshot('foo.png')

如果你有一个图片文件想在上面做点击操作,你可以用locateOnScreen()函数来定位。

In [ ]:

#  返回(最左x坐标,最顶y坐标,宽度,高度)

pyautogui.locateOnScreen('pyautogui/looks.png')

Out[ ]:

(0, 1040, 48, 40)

locateAllOnScreen()函数会寻找所有相似图片,返回一个生成器:

In [ ]:

for i in pyautogui.locateAllOnScreen('pyautogui/looks.png'):

    print(i)

(0, 1040, 48, 40)

In [ ]:

list(pyautogui.locateAllOnScreen('pyautogui/looks.png'))

Out[ ]:

[(0, 1040, 48, 40)]

locateCenterOnScreen()函数会返回图片在屏幕上的中心XY轴坐标值:

In [ ]:

pyautogui.locateCenterOnScreen('pyautogui/looks.png')

Out[ ]:

(24, 1060)

如果没找到图片会返回None。

定位比较慢,一般得用1~2秒

缓动/渐变(Tween / Easing)函数

缓动/渐变函数的作用是让光标的移动更炫。如果你不需要用到的话,你可以忽略这些。

缓动/渐变函数可以改变光标移动过程的速度和方向。通常鼠标是匀速直线运动,这就是线性缓动/渐变函数。PyAutoGUI有30种缓动/渐变函数,可以通过pyautogui.ease*?查看。其中,pyautogui.easeInQuad()函数可以用于moveTo(),moveRel(),dragTo()和dragRel()函数,光标移动呈现先慢后快的效果,整个过程的时间还是和原来一样。而pyautogui.easeOutQuad函数的效果相反:光标开始移动很快,然后慢慢减速。pyautogui.easeOutElastic是弹簧效果,首先越过终点,然后再反弹回来。例如:

In [ ]:

#  开始很慢,不断加速

pyautogui.moveTo(100,100,2,pyautogui.easeInQuad)

#  开始很快,不断减速

pyautogui.moveTo(100,100,2,pyautogui.easeOutQuad)

#  开始和结束都快,中间比较慢

pyautogui.moveTo(100,100,2,pyautogui.easeInOutQuad)

#  一步一徘徊前进

pyautogui.moveTo(100,100,2,pyautogui.easeInBounce)

#  徘徊幅度更大,甚至超过起点和终点

pyautogui.moveTo(100,100,2,pyautogui.easeInElastic)

这些效果函数是模仿Al Sweigart的PyTweening模块,可以直接使用,不需要额外安装。

如果你想创建自己的效果,也可以定义一个函数,其参数是(0.0,1.0),表示起点和终点,返回值是介于[0.0,1.0]之间的数。

鼠标单击

click()函数模拟单击鼠标左键一次的行为。例如:

In [ ]:

pyautogui.click()

如果单机之前要先移动,可以把目标的XY坐标值传入函数:

In [ ]:

#  先移动到(100, 200)再单击pyautogui.click(x=100,y=200,duration=2)

可以通过button参数设置left,middle和right三个键。例如:

In [ ]:

pyautogui.click(button='right')

要做多次单击可以设置clicks参数,还有interval参数可以设置每次单击之间的时间间隔。例如:

In [ ]:

#  双击左键

pyautogui.click(clicks=2)

#  两次单击之间停留0.25秒

pyautogui.click(clicks=2,interval=0.25)

#  三击右键

pyautogui.click(button='right',clicks=2,interval=0.25)

为了操作方便,PyAutoGUI提供了doubleClick(),tripleClick()和rightClick()来实现双击、三击和右击操作。

鼠标按下和松开函数

mouseDown()和mouseUp()函数可以实现鼠标按下和鼠标松开的操作。两者参数相同,有x,y和button。例如:

In [ ]:

#  鼠标左键按下再松开

pyautogui.mouseDown();

pyautogui.mouseUp()

#  按下鼠标右键

pyautogui.mouseDown(button='right')

#  移动到(100, 200)位置,然后松开鼠标右键

pyautogui.mouseUp(button='right',x=100,y=200)

滚轮滚动函数

鼠标滚轮滚动可以用scroll()函数和clicks次数参数来模拟。不同平台上的clicks次数不太一样。还有x和y参数可以在滚动之前定位到(x, y)位置。例如:

In [ ]:

#  向上滚动10格

pyautogui.scroll(10)

#  向下滚动10格

pyautogui.scroll(-10)

#  移动到(100, 100)位置再向上滚动10格

pyautogui.scroll(10,x=100,y=100)

在OS X和Linux平台上,PyAutoGUI还可以用hscroll()实现水平滚动。例如:

In [ ]:

#  向右滚动10格

pyautogui.hscroll(10)

#  向左滚动10格

pyautogui.hscroll(-10)

scroll()函数是vscroll()的一个包装(wrapper),执行竖直滚动。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容