Python 自动化办公:实现指定位置定时点击

Deepseek提供支持

在日常办公中,重复性的鼠标点击操作常常耗费大量时间和精力。借助 Python 语言,我们可以轻松编写自动化脚本,实现指定位置的定时点击,极大提高工作效率。本文将详细介绍如何开发这样一个脚本。

一、安装pyautogui库

(一)安装必要库

脚本主要依赖pyautogui库来控制鼠标操作。在安装时,若遇到pip install pyautogui超时的情况,可使用国内镜像源来加速安装,比如使用清华大学的镜像源,命令为:

广告
广告图片

pip install pyautogui
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout=100 pyautogui #清华大学的镜像源

该命令将安装源切换到清华镜像,并将超时时间延长到 100 秒,能有效避免因网络问题导致的安装失败。

(二)确定点击坐标

获取坐标的方法如下:

  1. 使用系统自带工具:在 Windows 系统中,可以通过 “画图” 工具打开相关截图,当鼠标移动到目标位置时,状态栏会实时显示当前坐标。
  2. 使用 Python 脚本获取:运行以下脚本,移动鼠标到目标位置,脚本会每秒更新并显示当前坐标。
  3. 使用本站坐标获取工具: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
请先登录才能参与答题
距本场结束剩 00 00 00 00
轻量应用服务器 2核2G
200M峰值带宽,适用于网站搭建、Web应用、容器环境、电商独立站等
立即前往
扫码进入
扫描二维码购买
文澜千文

文澜千文

请登录以使用此功能。

卡乐比(Calbee)薯片 经典原味系列60g/袋 薯条薯片 休闲零食 膨化食品 卡乐比(Calbee)薯片 经典原味系列60g/袋 薯条薯片 休闲零食 膨化食品
Loading...