<div>
<p></p>
<div style="text-align:center;">
<img alt="1b5e1028b7c214d685f74f19d2db7896.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-4ce41fe5001618c47b6e1fdbce96a947.png">
</div>
<blockquote>
本文共3500余字,预计阅读时间12分钟,本文知乎连接:Python自动操作GUI神器PyAutoGUI,本文同步发布于silaoA的博客和微信公众号平台。 关注学习了解更多的Cygwin、Linux、Python技术。
</blockquote>
<p>日常使用计算机,命令行程序可以说是为批量操作文件而生,但作为普通用户,最多的还是通过鼠标键盘操作形形色色的图形界面程序。试想下面一个场景:有成千上万个文件,都需要通过图形界面进行同样的一套编辑、保存工作,靠手工一遍一遍地重复做,累死人不说,时间久了必然出现错误,<b>作为程序猿,怎么能忍重复3次以上的工作,必须利用程序自动化</b>。要想图形界面也能像命令行程序那样精确控制,就需要GUI自动化工具了。不得不赞Python生态之丰富,GUI自动化自动化工具也有多种库可选,比如Windows平台的<code>pywin32</code>,以及本文主角——跨平台的<code>PyAutoGUI</code>。</p>
<h2>目 录</h2>
<ul><li><b>0x00 PyAutoGUI简介 </b></li><li><b>0x01 PyAutoGUI使用入门</b>
<ul><li><b>安装</b></li><li><b>快速上手</b>
<ul><li>1. 通用功能</li><li>2. 鼠标控制</li><li>3. 键盘控制</li><li>4. 消息窗口</li><li>5. 截图相关</li></ul></li></ul></li><li><b>0x02 任务示例</b></li><li><b>参考 </b></li><li><b>更多阅读</b></li></ul>
<h2>0x00 PyAutoGUI简介</h2>
<p><code>pywin32</code>直接包装了几乎所有的Windows API,可以方便地从Python直接调用,把Windows API按照功能分了一些大类,每一个大类作为一个模块,常见如<code>win32api</code>、<code>win32gui</code>、<code>win32com</code>等,其中<code>win32com</code>使用微软独门的<code>COM</code>接口技术进行进程间通信,可以实现控制GUI程序。但前提是,这些程序得支持<code>COM</code>接口。<code>win32api</code>则更加原始,完全通过Win32 API调用获得/生成窗口句柄、发送消息事件,十分繁琐。</p>
<p><code>PyAutoGUI</code>的思路与此完全不同,它是接管了鼠标、键盘使用权,基本上完全照搬人的操作,底层不必套牢在Windows系统,没错,它是<b>跨平台</b>的。官网地址:https://github.com/asweigart/pyautogui。原本,这类GUI自动化工具的初衷是给GUI程序自动化测试用,产生点击鼠标、敲击键盘的行为,在日志中记录下消息事件和GUI程序的响应结果,事后分析GUI程序可能存在的bug。不过,既然能产生点击鼠标、敲击键盘的行为,我们就可以用来控制GUI程序批量完成文件编辑、保存工作。</p>
<p>按照官方的说法,<code>PyAutoGUI</code>给人类用的GUI自动化神器,简单高效、函数分类清晰,它被awesome-python、awesome-python-cn收录。</p>
<h2>0x01 PyAutoGUI使用入门</h2>
<h2>安装</h2>
<p>推荐通过pip安装,一行命令搞定。</p>
<div class="blockcode">
<pre class="blockcode"><code>python -m pip install -U pyautogui</code></pre>
</div>
<p><code>PyAutoGUI</code>依赖于<code>pyscreeze</code>、<code>pymsgbox</code>、<code>pytweening</code>,上述命令会自动安装这3个库。安装完成后可以发现,在<code>site-packagespyautogui</code>有6个文件,名字带java、osx、win、x11的是在不同平台的实现方案,再在<code>__init__.py</code>和<code>__main__.py</code>中检测当前系统平台进行封装。其中,java平台的实现文件为空,猜测是未来计划支持的,先占个坑。</p>
<div class="blockcode">
<pre class="blockcode"><code>__init__.py
__main__.py
_pyautogui_java.py # 空文件,猜测是未来支持
_pyautogui_osx.py
_pyautogui_win.py
_pyautogui_x11.py</code></pre>
</div>
<h2>快速上手</h2>
<p><code>PyAutoGUI</code>设计简洁,相关符号经过内部import之后,被封装在<code>pyautogui</code>单个模块中,因此Python程序中只要<code>import pyautogui</code>之后便可通过<code>.</code>符号访问<code>pyautogui</code>中的函数、变量。<code>pyautogui</code>中函数大致分为通用功能、鼠标控制、键盘控制、消息窗口、截图5大类。 </p>
<p>1. 通用功能</p>
<div class="blockcode">
<pre class="blockcode"><code>In [1]: import pyautogui
In [2]: pyautogui.size() # 获取屏幕尺寸(分辨率×分辨率)
Out[2]: Size(width=1920, height=1080)
In [3]: pyautogui.position() # 获取鼠标当前位置
Out[3]: Point(x=846, y=437)
In [4]: pyautogui.onScreen(100,200) # 判断坐标是否在屏幕范围内
Out[4]: True
In [5]: pyautogui.onScreen(100,2000) # 判断坐标是否在屏幕范围内
Out[5]: False</code></pre>
</div>
<p>坐标体系至关重要,后续鼠 |
|