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

