Python自动化脚本开发技术汇总及研究方向

liftword1周前 (05-13)技术文章4

我最近一直在研究Python在Windows、Mac OS和Linux国产化桌面操作系统下自动化操作脚本开发,国产化操作系统主要适配UOS和麒麟系列。Python本身跨平台,但是不同平台下Python库实现各不相同,这里我介绍几款比较优秀的Python自动化库。

PyAutoGUI


PyAutoGUI是一个纯Python的GUI自动化工具,通过它可以让程序自动控制鼠标和键盘的一系列操作来达到自动化的目的。PyAutoGUI优点是跨平台,支持WIN/Mac/Linux,这已经很难得了,非常优秀了!


PyAutoGUI安装很简单:

pip install pyautogui

下面是PyAutoGUI常用的方法函数:

  • pyautogui.position():可获取当前鼠标坐标
x, y = pyautogui.position() 
  • pyautogui.move():以鼠标当前位置移动x,y个像素
pyautogui.move(x=None, y=None, duration=0.0, tween=pyautogui.easeInQuad) 
#按下鼠标,填写坐标的话,就pyautogui.mouseDown():按下鼠标
pyautogui.mouseDown(x=None, y=None, button='', duration=0.0) 
#按下鼠标,填写坐标的话,就是移动到某个坐标下按下 
# x,y为移动到某点按下,不填的话默认当前位置按下 
# button按下的点击项,默认左按下 # duration整体指令运行的时间。
  • pyautogui.mouseUp():松开鼠标
  • pyautogui.dragRel():在鼠标当前位置点击后相对移动
pyautogui.dragRel(xOffset=20, yOffset=100, duration=3, tween=pyautogui.easeInQuad, button='left')
# 在鼠标当前位置点击后相对移动,结束后自动松开
# xOffset,yOffset为移动的距离
# duration整个移动的耗时
# tween移动的速度+轨迹
# button设置点击项,默认左击
  • pyautogui.dragTo():从当前位置拖拽到指定坐标轴
pyautogui.dragTo(x=None, y=None, duration=0.0, tween=pyautogui.easeInQuad, button="left")  # 鼠标从当前位置拖拽到指定坐标
# x,y为坐标,鼠标移动到指定的坐标(x,y)
# duration整个移动的耗时
# tween移动的速度+轨迹
# button设置点击项,默认左击
  • pyautogui.keyDown('') :按下某个键
pyautogui.keyDown('shift')  # 按下shift键
  • pyautogui.keyUp('') :松开键盘

pyautogui.keyUp('shift')  # 松开shift键
  • pyautogui.press(' '):输入内容

pyautogui.press("这是输入的内容")  
  • pyautogui.typewrite():缓慢输入
pyautogui.typewrite("message", interval=2)  # 缓慢输入
# message:为输入的内容
# interval:设置每两个字符输入的时间间隔,单位s
  • pyautogui.hotkey():多键组合使用
pyautogui.hotkey('ctrl', 'a')  # 多键组合使用
  • pyautogui.alert():alert弹框
a = pyautogui.alert(text='test', title='pyautogui')  # alert弹框
# text:弹框内容
# title:弹框标题
  • pyautogui.confirm():confirm弹框
a = pyautogui.confirm(text='test', title='pyautogui')  # alert弹框,点击确定返回ok,点击取消返回cancel
# text:弹框内容
# title:弹框标题
  • pyautogui.screenshot():截图
img = pyautogui.screenshot()  # 默认截取全屏
img.save("./img/gui.png")  # 截取后的图片保存位置
  • pyautogui.scroll():垂直滚动,负数为向下滚动,正数为向上滚动
  • pyautogui.hscroll() :水平滚动
  • pyautogui.vscroll() :垂直滚动,负下正上

PyGetWindow


一个简单的跨平台模块,用于获取和控制应用程序窗口上的GUI信息。PyGetWindow跨平台,在Windows下实现很棒,在Mac和Linux下只实现了其中部分功能,目前最新版本v0.0.7。

为什么这里要介绍PyGetWindow,它本身不会实现自动代填功能,但是实现GUI自动代填时,非常麻烦的是要获取窗口焦点、标题等信息,PyGetWindow主要用来获取窗口标题。

AppKit / Quartz

Python在Windows下实现模拟自动化操作要比在Mac和Linu下要容易的多,因为在Windows下有pywin32和pyhook,功能非常强大,而Mac下这方面的库很少,这里就要借助AppKit和Quartz,下面会有一段代码,是用来在Mac获取窗口信息的,至于Linux下目前还在研究中。

   if platform.system() == 'Darwin':
        from AppKit import NSWorkspace
        from Quartz import (
            CGWindowListCopyWindowInfo,
            kCGWindowListOptionOnScreenOnly,
            kCGNullWindowID
        )
        curr_app = NSWorkspace.sharedWorkspace().frontmostApplication()
        curr_pid = NSWorkspace.sharedWorkspace().activeApplication()['NSApplicationProcessIdentifier']
        curr_app_name = curr_app.localizedName()
        options = kCGWindowListOptionOnScreenOnly

上面这段代码在Mac下能够获取当前活动状态下的所有窗口。

windowList = CGWindowListCopyWindowInfo(options, kCGNullWindowID)
            for window in windowList:
                pid = window['kCGWindowOwnerPID']
                windowNumber = window['kCGWindowNumber']
                ownerName = window['kCGWindowOwnerName']
                geometry = window['kCGWindowBounds']
                windowTitle = window.get('kCGWindowName', u'Unknown')
                if curr_pid == pid:
                    w = geometry['Width']
                    h = geometry['Height']

通过遍历上面所有窗口,就能够获取当前应用的窗口信息,因为这里能获取到窗口标题,并且能够获取窗口的宽和高,通过这些特性基本上就能够定位你要的窗口,再配合PyAutoGUI就实现模拟代填等自动化操作。

完整代码我可以分享出来。

除了上述介绍的PyAutoGUI、PyGetWindow、AppK、Quartz,在Mac下还有AppleScript也可以实现自动化操作,AppleScript功能非常强大,可以打开某个应用,还能获取窗口上的元素信息,包括窗口上菜单和文本信息,都可以获取到,在Python里有对应的applescript库支持,我觉得AppleScript是研究自动化操作方面非常重要的一个方向。

Mac和Linux平台下自动化操作,还可以借助expect shell脚本,比如通过expect shell脚本可以实现ssh自动化登录的,Shell中根据匹配到的回显,Send(输入)相应的信息。

#!/usr/bin/expect

set timeout 30
spawn ssh -p 22 root@192.168.10.171

expect {
        "(yes/no)?"
        {send "yes\n";exp_continue}
        "password:"
        {send "123456\n"}
}
interact

以上技术点是我最近从事Python开发研究的方面,后面还会继续深耕,分享干货,共同学习,共同进步。

___END___

相关文章

Linux系统下,五大步骤安装Python

一、下载Python包网上教程大多是通过官方地址进行下载Python的,但由于国内网络环境问题,会导致下载很慢,所以这里建议通过国内镜像进行下载例如:淘宝镜像 http://npm.taobao.or...

linux安装python

linux安装python3.5.11.linux如果已经安装了python2.* 不要管它!!!2.安装依赖环境  一定要使用yum去安装!!! 因为有的包有依赖或者升级需要,使用rpm取消强制依赖...

1分钟搞定!Python超速工具uv换国内镜像,下载速度飙升10倍

1分钟搞定!Python超速工具uv换国内镜像,下载速度飙升10倍作为搞运维的老手,我太清楚 Python 包下载速度慢是啥滋味了。今天我来教你用 3 行代码给 uv 换上清华或者阿里云的镜像,这样就...

Linux和Windows下:Python Crypto模块安装方式区别

一、Linux环境下:from Crypto.Signature import PKCS1_v1_5 如果导包报错: ImportError: No module named 'Crypt...

linux下Python版HTTP服务器(用于分享文件)

1、在终端进入你想分享的文件夹中,然后输入:python -m SimpleHTTPServer 端口号如:python -m SimpleHTTPServer 80092、在别的机器的浏览器地址栏输...

Windows 10 20H2新特性概览:细节优化 提升使用体验

来源:cnBeta.COM微软计划在5月28日发布Windows 10 May 2020(Version 2004/20H1)功能更新。在该功能更新发布之后微软将开发重心迁移到20H2和21H1功能更...