了解自动化模块 PyAutoGUI 基本操作

本贴最后更新于 716 天前,其中的信息可能已经时移世改

PyAutoGUI lets your Python scripts control the mouse and keyboard to automate interactions with other applications. The API is designed to be simple. PyAutoGUI works on Windows, macOS, and Linux, and runs on Python 2 and 3.

Welcome to PyAutoGUI’s documentation! — PyAutoGUI documentation

1、电脑屏幕的坐标系

引入笛卡尔直角坐标系,以屏幕左上点为原点,X 轴正方形水平向右,Y 轴正方形铅锤向下,此坐标系的单位距离是像素点
左上角的像素位于 (0,0)如果您的屏幕分辨率为 1920*2080,则右下角的坐标为 (1919,2079)
像素图是由许多像素点组成的一个像素点是指具有某个颜色的小正方形。

Snipaste20230201143006.png

2、获取鼠标位置

口 获取屏幕分辨率的大小
pyautogui.size()
口 获取当前鼠标的位置
pyautogui.position( )
口 检查 XY 坐标是否在屏幕上
pyautogui. onScreen(x,y )如果它们位于屏幕的边界内,返回 True;否则,返回 False
传入参数:两个整数参数或带有两个整数的单个元组或列表

>>> import pyautogui >>> pyautogui.size() Size(width=2560, height=1600) >>> pyautogui.position() Point(x=2066, y=1393) >>> x,y=pyautogui.position() >>> print(x,y) 1468 920 >>> pyautogui.onScreen(2000,1300) True

3、控制鼠标移动

口鼠标运动
pyautogui.moveTo( X,Y) 传递坐标后,鼠标光标移到到该位置 pyautogui.moveTo(100, 200)
pyautogui.moveTo(None, 500)
pyautogui.moveTo(600, None)如果希望鼠标逐渐移动到新位置,需要在函数中传入第三个参数: 移动应采取的持续时间 (秒)。不指定该参数,默认为 0.1s pyautogui.moveTo(100, 200,2)

pyautogui.moveTo(200,300) 绝对移动

pyautogui.move(-200,300) 从当前位置相对移动

>>> import pyautogui >>> pyautogui.moveTo(1000,1400,duration=2) >>> pyautogui.move(-200,300,duration=3)

4、按住鼠标拖动

口 鼠标拖动

pyautogui.dragTo( X,Y,button= “left')pyautogui.dragTo( X,Y,button= 'right’)传递坐标后,按住左键/右键将鼠标光标移动到该位置同样可以在函数中传入第三个参数: 移动应采取的持续时间 (秒)pyautogui.dragTo(300, 400, 2, button='left’)>>> pyautogui.dragTo(2000,1300,duration=3,button='left') 绝对拖动
pyautogui.drag(200,130,duration=3,button='left') 相对当前位置拖动

>>> import pyautogui >>> pyautogui.dragTo(2000,1300,duration=3,button='left') >>> pyautogui.drag(200,130,duration=3,button='left')

5、模拟鼠标点击

口 鼠标点击

pyautogui.click()
模拟鼠标在当前位置单击左键

pyautogui.click(x=100,y=100)

pyautogui.click(button='right’)

pyautogui.click(clicks=2)
pyautogui.click(clicks=2, interval=0.25)

pyautogui.click(button= 'right”, clicks=3, interval=0.25)
pyautogui.doubleClick( )
pyautogui.tripleClick()

>>> pyautogui.click() >>> pyautogui.click(button='right') >>> pyautogui.click(button='right',clicks=3,interval=2)

6、控制鼠标按压和释放

口 mouseDownlmouseUp
由鼠标点击、拖动及按下按钮并释放组成

pyautogui.mouseDown(button='right')

pyautogui.mouseUp(button='right, x=100, y=200)
口 鼠标滚动
pyautogui.scroll(10)pyautogui.scroll(-10)

pyautogui.scroll(10, x=100, y=100)

//画图 >>> pyautogui.click(425,153) >>> x,y=pyautogui.position() >>> print(x,y) 433 162 >>> pyautogui.click(433,162,clicks=2) >>> pyautogui.move(300,200) >>> pyautogui.mouseDown(button='left') >>> pyautogui.move(300,200) >>> pyautogui.mouseUp(button='left')

7、控制键盘自动输入

口 write()函数
pyautogui.write('Hello world!”)

pyautogui.write('Hello world!' interval=0.25)键入字符串的每个字符。输入每个字符之间需要时间间隔,参数 interval
口 按下后释放一个键 press
pyautogui.press('enter') # press the Enter keypyautogui.press('f1)# press the F1 keypyautogui.press(left)# press the left arrow key

口 热键 hotkey
为了方便按热键,按顺序向按下字符串代表的键,然后按反向顺序释放

pyautogui.hotkey('ctrl', 'shift, 'esc')

pyautogui.keyDown('ctrl')

pyautogui.keyDown('shift')

pyautogui.keyDown('esc')

pyautogui.keyUp('esc')
pyautogui.keyUp('shift')
pyautogui.keyUp('ctrl')

>>> pyautogui.write('I am lonely without you',interval=0.6) >>> pyautogui.press('x')

离线安装 pyautogui

#准备安装包 #安装前执行下 pip freeze >requirements_before.txt pip install pyautogui >pip freeze >requirements_after.txt # 取before和after不同的包,然后保存文件为requirements.txt >pip download -d packages -r requirements.txt 离线安装 pip install --no-index --find-links=packages -r requirements.txt

Win 定时执行 python 脚本

https://github.com/qiu8310/crontab#windows-版-crontab-java

截图并保存

#/usr/bin/env python3 import os import pyautogui as pa import time def make_dir(dirs): if not os.path.exists(dirs): os.makedirs(dirs) def get_file_path(dirs): time_format = "%Y-%m-%d-%H-%M-%S" time_now=time.strftime(time_format,time.localtime()) file_path=os.path.join(dirs,time_now) file_path=file_path+".png" return file_path def screen_shot(file_path): im1 = pa.screenshot(file_path) dirs="D:\yxscan" make_dir(dirs) screen_shot(get_file_path(dirs))
  • PyAutoGUI
    2 引用
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    557 引用 • 675 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    170 引用 • 1150 回帖
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    174 引用 • 539 回帖
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 630 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    345 引用 • 748 回帖
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 8 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    5 引用 • 7 回帖 • 2 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖
  • 笔记

    好记性不如烂笔头。

    310 引用 • 794 回帖 • 1 关注
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 7 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖 • 1 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 650 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    133 引用 • 1124 回帖 • 107 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 29 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    83 引用 • 37 回帖
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    42 引用 • 130 回帖 • 249 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 634 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 530 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 48 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 5 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 158 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 555 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 5 关注
  • OnlyOffice
    4 引用 • 22 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 3 关注