先来看一个动图:

图片展示的是如何用 Python 将销售交易数据填充到在线发票生成器中,可以自动生成并下载所有客户的发票。

再来看一段视频

视频展示的是如何用 Python 来玩 Flash 游戏 Sushi Go Round。源代码[1]

是不是很酷炫呢?

它们都是借助 PyAutoGUI 来实现的。

有经验的朋友可能会说,selenium 或 playwright 等浏览器自动化工具就可以实现这样的需求,这有什么酷炫的,你说的没错,如果是浏览器是的确可以使用 selenium 或 playwright,前提还得要懂 html、css、浏览器等相关知识。如果录入操作不是在浏览器上进行,而是客户端的应用程序上录入,那么 selenium 或 playwright 将无法使用。

如果你也想实现上述展示的效果,不妨继续向下看。

PyAutoGUI 简介

今天要介绍的工具就是 PyAutoGUI,看到这个名字,就能猜到它的作用,无非用 Python 自动处理图形界面的操作,的确是这样,你可以使用编程的方式来控制电脑的鼠标和键盘。

它有两个优点:

  • 跨平台,支持 Python2 和 Python3,支持 Windows,MacOS,Linux。

  • 易使用,接口简单不需要太多知识就可以学会,会操作鼠标和键盘就可以。

一个缺点:

  • 需要定位鼠标,有时候不太方便,可移植性不强,换台电脑可能因为尺寸不同就报错了。

PyAutoGUI 安装

PyAutoGUI 支持 pip 进行安装

pip install pyautogui

如果是 Windows 不需要再安装其他依赖。

如果是 Mac 还要安装 pyobjc:

pip3 install pyobjc-core
pip3 install pyobjc

如果是 Linux 还需要安装下这些:

sudo apt-get scrot
sudo apt-get install python-tk
sudo apt-get install python3-dev

无论哪一个操作系统都要确保 Pillow 已经安装。如果是 Linux,你还需要安装额外的库来确保 Pillow 中的 PNG/JPEG 模块正常工作。具体可以参考:

https://stackoverflow.com/questions/7648200/pip-install-pil-e-tickets-1-no-jpeg-png-supporthttp://ubuntuforums.org/showthread.php?t=1751455

使用举例

使用前需要先了解屏幕坐标的设定,X 坐标从左侧的 0 开始,向右增加,Y 坐标从顶部的 0 开始,向下增加。如下图所示:

目前,PyAutoGUI 仅适用于主显示器。PyAutoGUI 对于第二台显示器的屏幕不可靠(鼠标功能可能会或可能不会在多显示器设置上工作,具体取决于您的操作系统和版本)。

PyAutoGUI 按下的所有键盘都会发送到当前具有焦点的窗口,就像您按下了物理键盘键一样。

鼠标和键盘控制

鼠标控制:

#1、鼠标移动
pyautogui.moveTo(100, 150)  #绝对位置
pyautogui.moveRel(None, 10) #相对位置
pyautogui.moveTo(500, 500, duration=2, tween=pyautogui.easeInOutQuad)  # 2秒带动画移动到500,500#2、鼠标点击
pyautogui.click()  单击
pyautogui.click(x=100, y=200) #
pyautogui.doubleClick()  双击
pyautogui.rightClick()  单击鼠标右键
pyautogui.middleClick() 单击鼠标中键
pyautogui.click(button='right', clicks=3, interval=0.25)
#3、鼠标拖动
pyautogui.dragTo(x,y[,duration=t)
pyautogui.dragRel(x,y, duration=0.5)  #按住左键移动
#4、鼠标滚动
pyautogui.scroll(10)  / -10  # 正数向上/下滚动
pyautogui.hscroll(10)  / -10 #  向右/左滚动

键盘操作:

pyautogui.typewrite('Hello world!', interval=0.25) #模拟输入
typewrite(['enter'])
pyautogui.typewrite(['a','b','left','left','X','Y']) # XYab
pyautogui.press('esc')
pyautogui.keyDown('shift')
pyautogui.press(['left', 'left', 'left', 'left', 'left', 'left']) 连续按键left
pyautogui.keyUp('shift')
pyautogui.hotkey('ctrl', 'c')   # 组合键

消息弹窗提醒

程序运行的过程中,还可以弹窗让你干预自动执行的流程:

>>> import pyautogui
>>> pyautogui.alert('This is an alert box.')
'OK'
>>> pyautogui.confirm('Shall I proceed?')
'Cancel'
>>> pyautogui.confirm('Enter option.', buttons=['A', 'B', 'C'])
'B'
>>> pyautogui.prompt('What is your name?')
'Al'
>>> pyautogui.password('Enter password (text will be hidden)')
'swordfish'

屏幕操作

## 0 截取整个屏幕
import pyautogui
im1 = pyautogui.screenshot()
im1.save('my_screenshot.png')
im2 = pyautogui.screenshot('my_screenshot2.png')## 1、截取部分屏幕
im = pyautogui.screenshot(r'C:\screenshot.png',region=(0, 0, 300, 400)) # 截屏并设置保存图片的位置和名称## 2、 匹配屏幕所有与目标图片的对象,可以用for循环和list()输出
pyautogui.locateAllOnScreen(r'C:\region_screenshot.png')
for pos in pyautogui.locateAllOnScreen(r'C:\\region_screenshot.png'):print(pos)## 3、获取屏幕点色彩属性值
pix = pyautogui.screenshot().getpixel((x, y))  #0,1,2=rgb## 4、灰度值匹配
pyautogui.pixelMatchesColor(100, 200, (205, 255, 245), tolerance=10)

定位操作

# 1、获取屏幕宽高
screenWidth, screenHeight = pyautogui.size()
# 屏幕左上开始为(0,0)
# 2、获取当前鼠标位置
currentMouseX, currentMouseY = pyautogui.position()
# 3、根据图片定位在图片在屏幕上的中点
x, y = pyautogui.locateCenterOnScreen(r'C:\screenshot.png')

打开浏览器,自动录入一个表单

注意不同的电脑浏览器的位置可能不一样,需要自己定位好输入框的位置 x,y。

import time
import pyautogui as pag
import webbrowserwebbrowser.open_new("https://formsmarts.com/html-form-example")#Let the web browser finish loading before clicking (sleep for 2 seconds)
time.sleep(2)pag.scroll(100)#Click on the input field
pag.click(x=700, y=970) #Type some data into the input field. We pass in an optional parameter of interval so it doesn't type too fast
pag.write('David Tan', interval=0.2)

工作原理

Windows、macOS 和 Linux 各有不同的方式来以编程方式控制鼠标和键盘。这通常会涉及晦涩和深入的技术细节。PyAutoGUI 的工作是将所有这些复杂性隐藏在一个简单的 API 后面。

在 Windows 上,PyAutoGUI 通过内置 ctypes 模块访问 Windows API(也称为 WinAPI 或 win32 API)。https://github.com/asweigart/nicewin[2] 上的 nicewin 模块演示了如何通过 Python 进行 Windows API 调用。

在 macOS 上,PyAutoGUI 使用 rubicon-objc 模块访问 Cocoa API。

在 Linux 上,PyAutoGUI 使用该 Xlib 模块访问 X11 或 X Window 系统。

使用场景

  • 一些辅助录入工具,比如一些涉及自动录入表单的场景

  • 玩游戏工具,比如 GitHub 上有不少用这个实现自动玩跳一跳小游戏

  • 执行自动化用户界面测试

  • 一些电脑上重复的机械化操作

  • GitHub 上的案例[3]

总之你可以发挥想象力,你的程序都能控制鼠标和电脑了,还有什么不可以完成的呢?

最后的话

你可以利用 PyAutoGUI 库开发 Python 脚本,控制鼠标和键盘来自动执行应用程序的交互。

都看到这儿了,你还没关注我嘛?如果有收获,请点在看支持,再不济点个赞总行了吧,感谢老铁支持。

参考资料

[1]

源代码: https://github.com/asweigart/sushigoroundbot

[2]

https://github.com/asweigart/nicewin: https://github.com/asweigart/nicewin

[3]

GitHub 上的案例: https://github.com/search?q=pyautogui

Python自动化办公-自动录入表单数据相关推荐

  1. php 保存表单数据,使用jquery和php自动保存表单数据

    我对PHP非常好,但是使用jQuery的总菜单,并且卡在自动保存表单数据中. 自动保存功能在dummy.php中每30秒调用一次.我正在将用于处理的序列化表单数据( – >数据库)发送到save ...

  2. struts2自动接收表单数据

    提交页面主要代码: <form method="post" action="messageAction">    <input type=&q ...

  3. word录入表单数据 java 导入系统,java导入excel | 怎么把excel中的数据批量导入到word中的表格中...

    用javascript怎么实现把excel中的数据批量导入到数据库表中 这个js不能直接实现吧 我们程序用到 先读取excel内容转换成数组 然后放到页面上 再提交表单 储存 MySql如何批量添加数 ...

  4. 谷歌浏览器如何清除自动填充表单数据??就是一登录进入就会将之前输入的内容自动输入进去进行清空

  5. python自动化办公能做什么-用Python自动办公,做职场高手(完结)

    教程目录: ┣━07.S2 Word自动化处理,又快又好做文档 ┃ ┣━36 本章介绍 ┣━08.[Word]S2-1 轻松用Python快速生成Word文档 ┃ ┣━45.[真实案例]S2-1-3 ...

  6. python表单数据系统_使用MultipartPostHandler用Python发布表单数据

    问题:使用Python的urllib2发布数据时,所有数据都是URL编码的,并作为内容类型发送:application/x-www-form-URL encoded.上载文件时,应将内容类型设置为mu ...

  7. python自动化办公:文件篇(自动整理文件,一键完成)

    文件整理不得不先提一下正则表达式 送上链接: python :re模块基本用法 一.列出文件夹下的所有文件 用到的库os Python os.path() 模块 详解 附算例 os.walk()用法 ...

  8. python自动化办公:excel篇,从此做表不加班。

    表格讲解 表格格式 表格分为:工作簿,工作表,单元格 如图:整个文件就是一个工作簿,下面的 zhengjiang_power 和sheet1为工作表. xlrd +xlwt读写表格 因为电脑右键新建的 ...

  9. python获取表单数据的代码_使用flask和python从html表单获取表单数据

    我正在尝试在按下submit时从文本字段中获取表单数据,以便将其放入json格式并作为另一个页面访问json数据,该页面将是localhost:5000/info.每次我试图用request.form ...

最新文章

  1. 使用Nexus配置Maven私有仓库
  2. 计算机安全完整性服务定义,计算机网络安全导论--5完整性保护.ppt
  3. 对象并不一定都是在堆上分配内存的
  4. TSQL与PL/SQL的比较
  5. 选择更安全的方式执行你的puppet更新
  6. java内联_JAVA中的内联函数
  7. django 1.8 官方文档翻译: 2-1-1 模型语法(初稿)
  8. python sorted下标_Python列表实用的代码片段
  9. C++ TBB 文档手册地址
  10. IDEA快速生成测试用例类和完成单元测试
  11. 影子之美!太阳日照阴影变化之计算模拟
  12. 左程云中级提升班-9在有限时间内获得最大奖励以及需要的最少时长问题
  13. 新浪微博登录 java_Java实现模拟登录新浪微博
  14. 联想ghost重装系统_联想笔记本系统重装图文教程
  15. 自定义ActionBar -- 更换返回键图标
  16. Python 爬取百万网易云音乐热门评论
  17. 联想笔记本linux不能启动无线网卡解决方法
  18. 来个模态kuang_使用 React 制作一个模态框
  19. ca根证书校验 java_JAVA-Android-根据CA证书验证X509Certificate(颁发者证书)
  20. 【多项式最小二乘拟合实验】

热门文章

  1. 计算机网络学习5—应用层
  2. 称重传感器的分类与选择
  3. 《MapReduce 2.0源码分析与编程实战》一1.6 本章小结
  4. 怎么用计算机录制mp3的音频,电脑录音软件怎么用?教你高质量的音频录制方法...
  5. 全渠道零售中台与数字化转型(2)-从“业务”角度看数字化转型与中台的实施
  6. POJ 3532 基尔霍夫电流定律 + 高斯消元
  7. 淘宝的行癲时代(上)
  8. OpenGL with QtWidgets:练习之绘制2D环形进度条
  9. 2020阿里云双11--0.73折起,爆款提前抢大促全攻略
  10. ALSM_EXCEL_TO_INTERNAL_TABLE的缺陷修改