前言:
最近遇到非常顶尖的动态网站,该站点具有用户行为跟踪系统等一系列的判别机制。处理起来较为吃力,于是应用到此模块包,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个像素点位置 负数为向下