
文章目录前言1.准备工作2.安装Python3.创建飞书群机器人3.1 创建机器人3.2 测试webhook时候可用4.创建项目文件夹5.安装Python依赖OCR 网络库6.编写Python脚本7. 运行程序8.扩展9.安装cpolar实现随时随地开发9.1 什么是cpolar9.2 部署cpolar10.配置公网地址11.保留固定公网地址总结前言早上刚到公司还没来得及打开电脑先要完成打卡下班准备离开又得确认一次考勤记录。有些团队除了正常考勤之外还要求将截图发送到群里留档或者上传到指定系统进行登记。单次操作可能只需要几十秒但如果每天都要重复几次时间长了就会发现这类工作几乎没有任何技术含量却又不得不做。我之前就遇到过类似场景。打卡完成后需要截图、检查时间、发送到群聊。有时候忙着处理别的事情等想起来的时候已经过去半个小时有时候截图发错群还得重新操作一次。整个流程并不复杂但足够琐碎。后来我开始思考一个问题既然电脑已经能够自动处理文档、自动发送邮件、自动执行脚本那么这种固定流程的工作是否也能交给程序完成答案显然是可以的。整个流程拆开来看其实并不复杂首先读取打卡截图然后识别图片中的时间或文字信息再将识别结果整理成消息发送到指定群聊。过去最大的难点在于 OCR 识别能力而随着 PaddleOCR 的成熟这部分工作已经变得相当简单。只要给它一张截图就能快速提取出图片中的文字内容。再结合飞书提供的 Webhook 能力我们就能够让程序自动向群聊发送消息。这样一来从截图识别到消息通知整个过程都可以交给 Python 自动完成。对于经常需要提交考勤截图、巡检截图、值班截图或者其他证明材料的场景来说这种方式能够省去大量重复劳动。本文将从零开始搭建这样一个自动化方案。你不需要 GPU也不需要复杂的服务器环境一台普通 Windows 电脑即可完成部署。我们会一步步完成 Python 环境配置、PaddleOCR 安装、飞书机器人创建、自动识别脚本编写以及远程触发能力扩展让这个自动打卡机器人真正能够稳定运行起来。准备好了吗让我们从第一行代码开始打造属于你的智能打卡助手1.准备工作下面是在Windows系统Win10/Win11上从零开始 搭建一个OCR 飞书 Python自动打卡机器人 的完整、详细、新手友好的操作指南。目标你把打卡截图如钉钉、企业微信放入一个文件夹 → Python自动识别图中文字 → 通过飞书机器人发送“打卡成功”消息到群聊。你需要准备一台 Windows 10/11 电脑一个飞书账号免费一部手机用于拍照打卡截图网络畅通2.安装Python打开浏览器访问 https://www.python.org/downloads/点击 “Download Python 3.11.x”推荐 3.11稳定且兼容性好)下载完成后双击安装包。务必勾选Add Python to PATH关键Install launcher for all users点击 “Install Now”安装完成后按 Win R输入cmd回车运行python--version如果显示Python版本说明安装成功3.创建飞书群机器人3.1 创建机器人打开 飞书 App或网页版 https://www.feishu.cn创建一个新群聊点击右上角 设置→ 「群机器人」 → 「添加机器人」选择 「自定义机器人」名称填打卡安全设置选择 「自定义关键词」输入关键词打卡成功点击「添加」复制 Webhook 地址一长串 URL以 https://open.feishu.cn/open-apis/bot/v2/hook/ 开头重要后面发的消息必须包含“打卡成功”这四个字否则飞书会拒绝发送3.2 测试webhook时候可用使用下面测试代码$webhookhttps://open.feishu.cn/open-apis/bot/v2/hook/你的完整hook地址$body{msg_typetextcontent{text打卡成功手动测试消息}}|ConvertTo-Json# 关键设置编码为 UTF-8Invoke-RestMethod-Uri$webhook-MethodPost-Body$body-ContentTypeapplication/json; charsetutf-8飞书群接收成功4.创建项目文件夹在桌面或任意位置新建一个文件夹命名为clock_in_bot进入该文件夹在这个目录下在创建一个文件夹clock_in_images用于后续识别图片上传一张图片名为test.py5.安装Python依赖OCR 网络库进入你的项目文件夹cdC:\Users\admin\Desktop\clock_in_bot安装所需库使用清华源加速pipinstallpaddlepaddle paddleocr requests pillow opencv-python-ihttps://pypi.tuna.tsinghua.edu.cn/simple安装成功后测试OCR是否可用如果输出OCR OK!说明安装成功python-cfrom paddleocr import PaddleOCR; print(OCR OK!)6.编写Python脚本在clock_in_bot文件夹中新建一个文本文件重命名为test.py注意后缀是 .py不是 .txt右键 → “编辑”用记事本打开粘贴以下代码这段代码是我反复测试最终成功的一版这版会一步步验证importosimporttimefrom paddleocrimportPaddleOCRimportrequests# 第 0 步配置 print(第 0 步加载配置...)FEISHU_WEBHOOK替换成你的飞书Webhook地址IMAGE_FOLDER./clock_in_imagesTEST_IMAGEos.path.join(IMAGE_FOLDER,test.png)# 放一张叫 test.png 的图进去print(f Webhook: {FEISHU_WEBHOOK})print(f 图片路径: {TEST_IMAGE})print(-*50)# 第 1 步确保文件夹存在 print(第 1 步创建图片文件夹...)os.makedirs(IMAGE_FOLDER,exist_okTrue)print(✅ 文件夹已准备好)print(-*50)# 第 2 步初始化 OCR print(第 2 步初始化 PaddleOCR可能需要1-2分钟...)try: ocrPaddleOCR(langch,use_gpuFalse,show_logFalse)print(✅ OCR 初始化成功)except Exception as e: print(f❌ OCR 初始化失败: {e})exit(1)print(-*50)# 第 3 步检查图片是否存在 print(第 3 步检查测试图片是否存在...)ifnot os.path.isfile(TEST_IMAGE): print(f❌ 图片不存在请放一张截图并命名为: {TEST_IMAGE})exit(1)else: print(✅ 图片存在)print(-*50)# 第 4 步执行 OCR 识别 print(第 4 步开始 OCR 识别...)try: resultocr.ocr(TEST_IMAGE,clsTrue)textifresult and result[0]:forlineinresult[0]:ifline and len(line)1: wordline[1][0]ifisinstance(word, str): textword texttext.strip()or[未识别到文字]except Exception as e: print(f OCR 异常详细信息: {e})text[OCR 异常]print(-*50)# 第 5 步构造消息强制包含关键词print(第 5 步构造飞书消息...)messagef打卡成功\n【OCR结果】\n{text}print(f 消息内容:\n{message})print(-*50)# 第 6 步发送到飞书 print(第 6 步发送消息到飞书...)try: resprequests.post(FEISHU_WEBHOOK,json{msg_type:text,content:{text:message}},timeout10,headers{Content-Type:application/json; charsetutf-8})resultresp.json()print(f 飞书返回: {result})ifresult.get(code)0: print(✅ 成功请去飞书群查看消息)else: print(f❌ 失败原因: {result.get(msg, 未知错误)})print(⚠️ 常见原因关键词不匹配必须包含“打卡成功”)except Exception as e: print(f 网络或请求异常: {e})print(-*50)print( 测试结束。按回车退出...)input()关键修改找到这一行FEISHU_WEBHOOK替换成你的飞书Webhook地址保留双引号不要删除7. 运行程序进入你的项目文件夹cdC:\Users\admin\Desktop\clock_in_bot运行脚本python auto_clock_in.py首次运行会自动下载OCR模型约 100MB请等待 1~2 分钟直到出现监听提示。运行成功后飞牛群聊自动发送消息成功程序会立即识别打卡截图文字并向你的飞书群发送消息推荐python脚本使用vscode测试因为测试效果更加直观恭喜你你已经拥有了一个全自动打卡通知机器人8.扩展在Windows上用Flask/FastAPI写一个简单的Web服务暴露一个/clockin接口。调用这个接口就执行打卡逻辑PaddleOCR 打卡。实际自动打卡路径C:\Users\admin\Desktop\clock_in_bot\test.py# 1.pyfrom flaskimportFlaskimportsubprocessimportos appFlask(__name__)# 主页可选用于测试服务是否在线app.route(/)def home():return✅ 打卡机器人在线访问 /clockin 触发打卡。# 核心打卡接口app.route(/clockin)def clock_in(): try:# 替换为你的实际打卡脚本路径建议用绝对路径script_pathrC:\Users\admin\Desktop\clock_in_bot\test.pyresultsubprocess.run([python, script_path],cwdos.path.dirname(script_path),# 设置工作目录capture_outputTrue,textTrue,timeout60# 防止卡死)outputresult.stdout \n result.stderrreturnfpre✅ 打卡执行完成:\n{output}/preexcept Exception as e:returnfpre❌ 打卡失败: {str(e)}/preif__name____main__:app.run(host0.0.0.0,port5000,debugFalse)执行成功后访问ip5000就可以查看打卡状态访问/clockin触发打卡。将你的Flask打卡服务与cpolar结合只需在本地运行 Flask 应用如http://127.0.0.1:5000然后通过cpolar创建一条HTTP隧道将其映射到公网地址例如https://xxxx.cpolar.cn这样无论你身处何地只要访问该公网链接的**/clockin**路径就能远程触发打卡脚本实现自动化操作——整个过程无需公网IP、无需复杂配置cpolar会安全地将外部请求转发到你的本地服务。9.安装cpolar实现随时随地开发9.1 什么是cpolarcpolar是一款安全高效的内网穿透工具无需公网IP或复杂配置只需一条命令即可将本地服务器、Web服务或任意端口映射到公网让你随时随地远程访问内网应用特别适合开发调试、远程运维和应急部署等场景。9.2 部署cpolarcpolar可以将你本地电脑中的服务如SSH、Web、数据库映射到公网。即使你在家里或外出时也可以通过公网地址连接回本地运行的开发环境。❤️以下是安装cpolar步骤使用一键脚本安装命令sudocurlhttps://get.cpolar.sh|sh安装完成后执行下方命令查看cpolar服务状态如图所示即为正常启动sudosystemctl status cpolarCpolar安装和成功启动服务后在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问Cpolar管理界面使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可打开浏览器访问本地9200端口使用cpolar账户密码登录即可,登录后即可对隧道进行管理。10.配置公网地址登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道隧道名称可自定义本例使用了:daka注意不要与已有的隧道名称重复协议http本地地址5000域名类型随机域名地区选择China Top创建成功后打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址接下来就可以在其他电脑或者移动端设备异地上使用地址访问。访问成功。11.保留固定公网地址使用cpolar为其配置二级子域名该地址为固定地址不会随机变化。点击左侧的预留选择保留二级子域名地区选择china Top然后设置一个二级子域名名称我使用的是daka大家可以自定义。填写备注信息点击保留。登录cpolar web UI管理界面点击左侧仪表盘的隧道管理——隧道列表找到所要配置的隧道点击右侧的编辑。修改隧道信息将保留成功的二级子域名配置到隧道中域名类型选择二级子域名Sub Domain填写保留成功的二级子域名地区: China Top点击更新更新完成后打开在线隧道列表此时可以看到随机的公网地址已经发生变化地址名称也变成了保留和固定的二级子域名名称。最后我们使用固定的公网地址在任意设备的浏览器中访问可以看到成功访问的页面这样一个永久不会变化的二级子域名公网网址即设置好了。总结从技术实现角度来看这个项目并不复杂但它很好地体现了自动化工具的价值。原本需要人工完成的截图查看、文字识别、消息发送等步骤被拆解后交给 PaddleOCR、Python 和飞书机器人协同处理最终形成了一套能够稳定运行的自动通知流程。更重要的是这套方案并不局限于打卡场景。只要能够获取图片并且需要识别其中的文字信息就可以沿用同样的思路。例如设备巡检记录、值班截图上报、报表自动审核、运维状态通知等场景都可以在此基础上继续扩展。再结合 Flask 接口和 cpolar 提供的远程访问能力本地运行的自动化服务也能够随时随地被触发调用。如果你平时也经常被各种重复性的截图和通知工作占用时间那么这类轻量级自动化方案或许值得尝试一下。花一点时间完成配置后面每天都能省下一些重复劳动这往往才是自动化最实际的意义。