Python 自动化办公:实现指定位置定时点击
在日常办公中,重复性的鼠标点击操作常常耗费大量时间和精力。借助 Python 语言,我们可以轻松编写自动化脚本,实现指定位置的定时点击,极大提高工作效率。本文将详细介绍如何开发这样一个脚本。
一、安装pyautogui库
(一)安装必要库
脚本主要依赖pyautogui库来控制鼠标操作。在安装时,若遇到pip install pyautogui超时的情况,可使用国内镜像源来加速安装,比如使用清华大学的镜像源,命令为:
pip install pyautogui
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout=100 pyautogui #清华大学的镜像源
该命令将安装源切换到清华镜像,并将超时时间延长到 100 秒,能有效避免因网络问题导致的安装失败。
(二)确定点击坐标
获取坐标的方法如下:
- 使用系统自带工具:在 Windows 系统中,可以通过 “画图” 工具打开相关截图,当鼠标移动到目标位置时,状态栏会实时显示当前坐标。
- 使用 Python 脚本获取:运行以下脚本,移动鼠标到目标位置,脚本会每秒更新并显示当前坐标。
- 使用本站坐标获取工具:Windows坐标获取
import pyautogui
import time
print("移动鼠标到目标位置,坐标将每秒钟更新一次...")
try:
while True:
x, y = pyautogui.position()
print(f"当前坐标: ({x}, {y})")
time.sleep(1)
except KeyboardInterrupt:
print("\n程序已停止")
二、脚本编写
(一)导入模块
import pyautoguiimport timeimport logging
这里导入pyautogui用于鼠标操作,time用于设置时间间隔,logging用于记录脚本运行时的信息,方便调试和监控。
(二)配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')logger = logging.getLogger(__name__)
通过上述代码配置日志级别为INFO,并设定日志输出格式,这样在脚本运行过程中,会按时间顺序记录操作信息。
(三)定义全局变量
# 屏幕分辨率
SCREEN_WIDTH = 1600
SCREEN_HEIGHT = 900
# 点击位置坐标(x, y) - 请根据实际情况修改这些值
CLICK_POSITIONS = [
(800, 450), # 第一张图黑色边框位置(示例坐标,需替换为实际坐标)
(900, 300), # 第二张图黑色边框位置(示例坐标,需替换为实际坐标)
(900, 300), # 再次点击第二张图黑色边框位置
(750, 600) # 第三张图黑色边框位置(示例坐标,需替换为实际坐标)
]
# 点击间隔时间(秒)
CLICK_INTERVAL = 15
这里定义了屏幕分辨率、要点击的坐标列表以及点击间隔时间。需要注意的是,CLICK_POSITIONS中的坐标需根据实际情况准确设置。
(四)编写点击函数
def click_position(x, y):
"""移动鼠标到指定位置并点击"""
try:
# 移动鼠标到指定位置
pyautogui.moveTo(x, y, duration=0.5) # 0.5秒内平滑移动
# 点击
pyautogui.click()
logger.info(f"点击位置: ({x}, {y})")
return True
except Exception as e:
logger.error(f"点击时出错: {str(e)}")
return False
该函数接收坐标参数,先将鼠标平滑移动到指定位置,再执行点击操作,并记录操作信息。若出现异常,会记录错误信息并返回False。
(五)编写主函数
def main():
"""主函数:循环执行点击操作"""
logger.info("自动化鼠标点击脚本已启动")
logger.info(f"屏幕分辨率: {SCREEN_WIDTH}x{SCREEN_HEIGHT}")
try:
# 等待5秒,让用户有时间切换到目标窗口
logger.info("准备开始,请在5秒内切换到目标应用窗口...")
time.sleep(5)
while True:
for position in CLICK_POSITIONS:
x, y = position
logger.info(f"尝试点击坐标: ({x}, {y})")
if click_position(x, y):
logger.info(f"成功点击坐标 ({x}, {y}),等待 {CLICK_INTERVAL} 秒")
time.sleep(CLICK_INTERVAL)
else:
logger.warning(f"点击失败,等待 {CLICK_INTERVAL} 秒")
time.sleep(CLICK_INTERVAL)
logger.info("完成一轮循环,重新开始...")
except KeyboardInterrupt:
logger.info("用户中断操作,脚本已停止")
except Exception as e:
logger.error(f"发生错误: {str(e)}")
主函数先记录脚本启动信息,然后等待 5 秒,给用户预留切换到目标应用窗口的时间。之后进入无限循环,依次对CLICK_POSITIONS中的坐标进行点击操作,根据点击结果记录相应信息,并按设定的间隔时间等待。若用户按下Ctrl + C,脚本会捕获KeyboardInterrupt异常并正常结束;若出现其他异常,也会记录错误信息。
(六)执行主函数
if __name__ == "__main__": main()
三、完整代码
import pyautogui
import time
import logging
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
# 屏幕分辨率
SCREEN_WIDTH = 1600
SCREEN_HEIGHT = 900
# 点击位置坐标(x, y) - 请根据实际情况修改这些值
CLICK_POSITIONS = [
(235, 333), # 第一张图黑色边框位置(示例坐标,需替换为实际坐标)
(1400, 117), # 第二张图黑色边框位置(示例坐标,需替换为实际坐标)
(1286, 612), # 再次点击第二张图黑色边框位置
]
# 点击间隔时间(秒)
CLICK_INTERVAL = 15
def click_position(x, y):
"""移动鼠标到指定位置并点击"""
try:
# 移动鼠标到指定位置
pyautogui.moveTo(x, y, duration=0.5) # 0.5秒内平滑移动
# 点击
pyautogui.click()
logger.info(f"点击位置: ({x}, {y})")
return True
except Exception as e:
logger.error(f"点击时出错: {str(e)}")
return False
def main():
"""主函数:循环执行点击操作"""
logger.info("自动化鼠标点击脚本已启动")
logger.info(f"屏幕分辨率: {SCREEN_WIDTH}x{SCREEN_HEIGHT}")
try:
# 等待5秒,让用户有时间切换到目标窗口
logger.info("准备开始,请在5秒内切换到目标应用窗口...")
time.sleep(5)
while True:
for position in CLICK_POSITIONS:
x, y = position
logger.info(f"尝试点击坐标: ({x}, {y})")
if click_position(x, y):
logger.info(f"成功点击坐标 ({x}, {y}),等待 {CLICK_INTERVAL} 秒")
time.sleep(CLICK_INTERVAL)
else:
logger.warning(f"点击失败,等待 {CLICK_INTERVAL} 秒")
time.sleep(CLICK_INTERVAL)
logger.info("完成一轮循环,重新开始...")
except KeyboardInterrupt:
logger.info("用户中断操作,脚本已停止")
except Exception as e:
logger.error(f"发生错误: {str(e)}")
if __name__ == "__main__":
main()
文章链接:https://www.lilianhua.com/python-automated-office-implementing-timed-clicks-at.html
English (US)
Español (ES)
Português (PT)
Français (CA)
Español (MX)
Español (VE)
Español (CO)
Español (AR)
Português (BR)
Quechua (PE)
Guaraní (PY)
简体中文 (ZH)
繁體中文 (HK)
日本語 (JP)
한국어 (KR)
हिन्दी (HI)
Pilipino (PH)
ไทย (TH)
Tiếng Việt (VN)
Bahasa Melayu (MY)
Bahasa Indonesia (ID)
বাংলা (BD)
اردو (PK)
සිංහල (LK)
ភាសាខ្មែរ (KH)
English (UK)
Français (FR)
Deutsch (DE)
Italiano (IT)
Русский (RU)
Nederlands (NL)
Türkçe (TR)
Polski (PL)
Svenska (SE)
Norsk (NO)
Dansk (DK)
Suomi (FI)
Ελληνικά (GR)
Čeština (CZ)
Magyar (HU)
Română (RO)
Български (BG)
Српски (RS)
Українська (UA)


