PyAutoGui 鼠标控制文档

前言:

        最近遇到非常顶尖的动态网站,该站点具有用户行为跟踪系统等一系列的判别机制。处理起来较为吃力,于是应用到此模块包,pyAutoGui类似于selenium,但更为出色的是它具侧重模拟用户的键盘,键盘,截图,消息框的操作,具有显示轨迹特效,更贴近人类行为操作的第三方库。


作者:Simon0903

链接:https://www.jianshu.com/u/2b4bc3b5e6fc

來源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

moveTo(x,y,duration=2) 将鼠标移动到指定的x、y坐标,在2秒内均速移动到。

moveRel(xOffset,yOffset) 相对于当前位置移动鼠标。

dragTo(x,y) 按下左键移动鼠标。

dragRel(xOffset,yOffset)按下左键,相对于当前位置移动鼠标。

click(x,y,button='left')  #参数可以是:left,right,middle

middleClick()模拟中键点击。

doubleClick()模拟左键双击。

mouseDown(x,y,button)模拟在x、y处按下指定鼠标按键。

mouseUp(x,y,button)模拟在x、y处释放指定键。

scroll(units)模拟滚动滚轮。正参数表示向上滚动,负参数表示向下滚动。

typewrite(message)键入给定消息字符串中的字符。

typewrite([key1,key2,key3])键入给定键字符串。

press(key)按下并释放给定键。

keyDown(key)模拟按下给定键。

keyUp(key)模拟释放给定键。

hotkey([key1,key2,key3])模拟按顺序按下给定键字符串,然后以相反的顺序释放。

screenshot()返回屏幕快照的Image对象。


安装

适用于window、OSX、linux等系统

注意: 

window系统上不需要安装其他依赖包

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

保护措施


建议设置 PAUSE 和 FAILSAFE 一起使用。


你的程序也可能会失控(即使是按照你的意思执行的),失控时需要阻断。如果鼠标还在自动操作,就很难在程序窗口关闭它。

为了能够及时中断,PyAutoGUI提供了一个保护措施。当pyautogui.FAILSAFE = True时,如果把鼠标光标在屏幕左上角,PyAutoGUI函数就会产生pyautogui.FailSafeException异常。如果失控了,需要中断PyAutoGUI函数,就把鼠标光标在屏幕左上角。要禁用这个特性,就把FAILSAFE设置成False:

FAILSAFE = False

import pyautogui as auto

auto.FAILSAFE=False

通过把pyautogui.PAUSE设置成float或int时间(秒),可以为所有的PyAutoGUI函数增加延迟。默认延迟时间是0.1秒。在函数循环执行的时候,这样做可以让PyAutoGUI运行的慢一点,所有的PyAutoGUI函数在延迟完成前都处于阻塞状态(block)。(未来计划增加一个可选的非阻塞模式来调用函数。),这个设置为贴近模拟人类行为是非常有用的。

例如:

PAUSE

import pyautogui as auto

auto.PAUSE=2.5

auto.moveTo(100,100);pyautogui.click()


一、鼠标控制:


#导入包:

import pyautogui as auto


#获取屏幕分辨率宽高属性,属性不同返回值可能不一样

size()

返回屏幕宽高2个结果

Width, Height = auto.size()

print(Width, Height)


# 获取鼠标当前位置坐标

position() 

返回2个结果,分别X,Y轴左边

currentMouseX, currentMouseY = auto.position()

print(currentMouseX, currentMouseY)


# 让鼠标位于屏幕水平垂直居中

没法截图运动中的鼠标轨迹...

Width,Height=pyautogui.size()

auto.moveTo(Width/2,Height/2)

# 鼠标均速移动

参数解释,x,y是坐标,duration=? 是用时几秒内完成这个动作

moveTo()

auto.moveTo(x,y, duration=2)  #2秒内均速移动到坐标x,y位置

#相对坐标移动

moveRel ()

此方法是按鼠标当前悬停的位置再增加坐标数值去移动。(例如,鼠标当前位置坐标是(100,100,),于是调用方法auto.moveRel (200,200, duration=0.8),则鼠标在用时0.8秒均速移动到坐标(300,,300)

auto.moveRel (x,y, duration=0.8) #鼠标在用时0.8秒均速移动到坐标 

#鼠标点击动作

click()

click(clicks=2)  #快速双击

click(clicks=2,interval=0.25)  # 间隔0.25s后点击第二次

click(button='right', clicks=2, interval=0.25) 点击右键,2次,间隔0.25

# 双击

doubleClick

auto.doubleClick()  

#右击

rightClick

auto.rightClick()

#拖拽

dragTo()

auto.dragTo(x,y,button='left')

# x,y坐标是拖拽到的终点位置坐标

# button可选为左击'left',右击''right,中间键点击'middle'

#相对位置拖拽

auto.dragRel()

auto.dragRel()

#当前位置点击拖拽+X,Y坐标的像素值,此函数与moveRel ()类似


(这些缓动功能是从Al Sweigart的PyTwening模块复制而来的:https://pypi.python.org/pypi/PyTweening https://github.com/asweigart/pytweening无需安装此模块即可使用推特功能。)

#鼠标缓动 (从慢到快)

easeInQuad 

auto.moveTo(,x,y,025,auto.easeInQuad)  #注意最后的参数是不带括号的

鼠标缓动(从快到慢)

easeOutQuad

auto.moveTo(,x,y,025,auto.easeOutQuad)  #注意最后的参数是不带括号的



鼠标按下和恢复拆分动作

mousedown()和mouseUp() 

auto.mouseDown(); auto.mouseUp()  #与click()做的事情一样,也有X,Y,button参数

鼠标滚轮


scroll()

auto.scroll(10)  #鼠标中间滚轮向上移动10个像素点位置 正数为向上

auto.scroll(-10)  #鼠标中间滚轮向上移动10个像素点位置 负数为向下

# OSX和Linux上,还有横向+垂直移动滚轮的函数方法

hscroll() 

auto.hscroll() 横向#

auto.hscroll(100)   #右横向移动

auto.hscroll(-100)   #左横向移动

vscroll()

auto.vscroll()   #垂直 

auto.vscroll(100)  #鼠标中间滚轮向上移动100个像素点位置 正数为向上

auto.vscroll(-100)  #鼠标中间滚轮向上移动100个像素点位置 负数为向下



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

推荐阅读更多精彩内容