前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python自动化办公-自动录入表单数据

Python自动化办公-自动录入表单数据

作者头像
somenzz
发布2021-08-19 16:24:55
2.4K0
发布2021-08-19 16:24:55
举报
文章被收录于专栏:Python七号Python七号

先来看一个动图:

图片展示的是如何用 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 进行安装

代码语言:javascript
复制
pip install pyautogui

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

如果是 Mac 还要安装 pyobjc:

代码语言:javascript
复制
pip3 install pyobjc-core
pip3 install pyobjc

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

代码语言:javascript
复制
sudo apt-get scrot
sudo apt-get install python-tk
sudo apt-get install python3-dev

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

代码语言:javascript
复制
https://stackoverflow.com/questions/7648200/pip-install-pil-e-tickets-1-no-jpeg-png-support

http://ubuntuforums.org/showthread.php?t=1751455

使用举例

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

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

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

鼠标和键盘控制

鼠标控制:

代码语言:javascript
复制
#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 #  向右/左滚动 

键盘操作:

代码语言:javascript
复制
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')   # 组合键
消息弹窗提醒

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

代码语言:javascript
复制
>>> 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'
屏幕操作
代码语言:javascript
复制
## 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)

定位操作

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

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

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

代码语言:javascript
复制
import time
import pyautogui as pag
import webbrowser

webbrowser.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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python七号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PyAutoGUI 简介
  • PyAutoGUI 安装
  • 使用举例
    • 鼠标和键盘控制
      • 消息弹窗提醒
        • 屏幕操作
        • 定位操作
        • 打开浏览器,自动录入一个表单
        • 工作原理
        • 使用场景
        • 最后的话
        • 参考资料
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档