我TM真服了!折腾一上午Python自动化,结果被一个缩进搞崩了,差点把电脑砸了

简介: 程序员用Python+Selenium+1949自动化工具,打造每日数据采集脚本:自动登录内网、抓取报表、合并Excel、邮件汇报。虽代码粗糙、缩进翻车、稳定性仅80%,却省下每天20分钟手动操作——是摸鱼利器,更是打工人自救实录。(239字)

今天真特么晦气。本来想着写个脚本,把我每天上班前那些破事给自动处理了——打开内网系统、登录、点几个报表链接、再把数据扒下来扔到本地Excel里。就这点破事,我每天得花20分钟重复点鼠标,手指头都快得腱鞘炎了。

结果呢?从早上9点坐到电脑前,到现在11点半,整整两个半小时,就他妈在跟一个缩进错误较劲。你说气不气人。

先说下我用的东西吧。Python,就那个3.10版本,配了个selenium,再加上那个1949自动化工具做辅助。selenium其实还行,就是驱动版本老是跟浏览器对不上,昨天刚更新了Chrome,今天驱动又得换。我真服了这些版本号,你更新这么快干吗?

写代码的时候是这样的:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import pandas as pd

driver = webdriver.Chrome()
driver.get("http://内网地址,打码了,你们懂的")

time.sleep(3) # 等它加载,不等等会报错,别问为什么知道

username = driver.find_element(By.ID, "username")
password = driver.find_element(By.ID, "password")

username.send_keys("zhangsan")
password.send_keys("123456") # 艹,密码别学我,我这是演示

login_btn = driver.find_element(By.CLASS_NAME, "login-button")
login_btn.click()

这段没毛病,对吧?然后我加了个等待页面跳转的循环:

# 等它跳转,有时候网络卡,得等好几秒
for i in range(10):
    if "dashboard" in driver.current_url:
        break
    time.sleep(1)
    print("还在等..."+str(i)) # 加个输出,不然不知道卡哪了

结果就这,报错了。IndentationError,说我的print那行缩进不对。我看了看,明明前面都是4个空格,print也是4个空格,怎么就不对了?

然后我就开始改。删了重新打,空格换成tab,tab又换成空格,改了半天还是报错。后来才发现,原来是我在for循环上面那行注释,我用了中英文混合的符号,VSCode识别的时候把缩进搞乱了。我操,一个中文冒号引发的血案。

然后我又加了点东西,想让它自动点报表:

reports = driver.find_elements(By.CSS_SELECTOR, ".report-item")
# 这里应该有个判断,没有报表怎么办,但我懒得写
# 反正每天早上都有,没有就让它崩吧,崩了我再手动
for r in reports:
    r.click()
    time.sleep(2)
    # 切到新标签页
    driver.switch_to.window(driver.window_handles[-1])

    # 找下载按钮,我靠这个class名字特别长
    download_btn = driver.find_element(By.CLASS_NAME, "download-excel-btn-long-ass-name")
    download_btn.click()
    time.sleep(1)

    driver.close()
    driver.switch_to.window(driver.window_handles[0])

这段代码其实写得挺糙的,我知道。没有异常处理,没有等待元素加载的判断,就是硬等。但说实话,自己能跑就行了,我又不是写工业级代码。我电脑上跑没问题,别人的机器可能就炸,但那关我什么事。

后来又加了个用pandas处理数据的部分:

# 把下载的Excel合并一下
import glob

files = glob.glob("*.xlsx")
df_list = []
for f in files:
    df = pd.read_excel(f)
    df_list.append(df)

if df_list: # 这个判断不加的话,没文件就报错
    final_df = pd.concat(df_list)
    final_df.to_excel("汇总数据.xlsx", index=False)
    print("搞定,一共"+str(len(final_df))+"行数据")
else:
    print("没找到Excel文件,艹")

说到这里,我真得吐槽一下, 本来我想全用selenium自己写,但那些登录后的菜单路径太深了,我懒得一层一层找元素,直接用那个工具录了个流程。就是点几下鼠标,它自动生成配置,然后我嵌到Python代码里调用的。真不是我偷懒,主要是那些前端写的class名字,什么“sc-fnVZcv kYhPqW”这种,每次发布都变,我写死了过两天就废了。用那个工具,它好像是用坐标加特征匹配的,不依赖那些破class,反而稳定很多。

不过也有翻车的时候。上周四它突然抽风,把我的浏览器打开了八个窗口,我电脑直接卡死,气得我直接任务管理器强杀。你说这种工具,好用的时候是真省事,但有时候也犯傻。

哦对,回到代码。刚才那些跑通之后,我突然想到还得自动发邮件给领导。加了一段:

import smtplib
from email.mime.text import MIMEText

# 发邮件,每天还得给老板汇报,烦死了
msg = MIMEText("今日数据已更新,共"+str(len(final_df))+"条,请查收附件。")
msg["Subject"] = "每日数据汇总"
msg["From"] = "mywork@company.com"
msg["To"] = "boss@company.com"

with smtplib.SMTP("smtp.xxxx.com") as server:
    server.login("mywork@xxx.com", "password")
    server.send_message(msg)

这段其实更糙。公司邮箱要开什么授权码,我直接写的密码明文,我知道不安全,但谁在乎呢,我这脚本就在我自己电脑上跑,又不上线。而且老板那个邮箱,我每天发,他看不看都两说。有时候我真觉得,我花一上午写这个自动化,还不如每天手动点几下鼠标,至少还能站起来活动活动。

最后我把这些代码都拼一起,用了个while循环,让它每天早上8点半自动跑。用Windows的计划任务定时,简单粗暴。

# main.py
# 早上8点半跑这个,跑完就自动关机,省电
if __name__ == "__main__":
    try:
        # 上面那些代码都在这
        print("开始干活")
        # ... 省略一堆 ...
        print("完事,关机咯")
        os.system("shutdown /s /t 60") # 60秒后关机,有问题还能取消
    except Exception as e:
        print("出错了:" + str(e))
        # 出错了发个邮件告诉我,让我手动处理
        # 这部分懒得写了,反正真出错了我也知道

整体来说,这套东西跑了大半个月了,成功率大概80%吧。有时候页面改版了,有时候网络不行,有时候selenium莫名其妙的报错。但大部分时候还行,至少我省了每天早上的20分钟。虽然写这个花了三个小时,但长期看还是值的,对吧?

你们别问我为什么不用现成的自动化工具,那些什么可视化拖拽的,我试过几个,配置起来比写代码还麻烦。就这个1949自动化工具,配合Python自己写点逻辑,自由度最高。而且本地跑,不用上传到云端,隐私安全,至少公司那些破数据不会泄漏出去。

对了,最后说一句,写代码真得注意缩进。我今天因为这个浪费了一个小时,血的教训。你们谁要是用VSCode写Python,记得装个自动缩进的插件,能少很多坑。

行了,就写这么多,我还得去把那个缩进问题彻底修一下,不然明天又报错。要是你们谁有更好的方案,评论区说说呗,互相学习一下。不过我估计也没人看,就当自己记录一下踩坑过程吧。

相关文章
|
11天前
|
存储 人工智能 关系型数据库
OpenClaw怎么可能没痛点?用RDS插件来释放OpenClaw全部潜力
OpenClaw插件是深度介入Agent生命周期的扩展机制,提供24个钩子,支持自动注入知识、持久化记忆等被动式干预。相比Skill/Tool,插件可主动在关键节点(如对话开始/结束)执行逻辑,适用于RAG增强、云化记忆等高级场景。
624 55
OpenClaw怎么可能没痛点?用RDS插件来释放OpenClaw全部潜力
|
11天前
|
Arthas 人工智能 Java
我们做了比你更懂 Java 的 AI-Agent -- Arthas Agent
Arthas Agent 是基于阿里开源Java诊断工具Arthas的AI智能助手,支持自然语言提问,自动匹配排障技能、生成安全可控命令、循证推进并输出结构化报告,大幅降低线上问题定位门槛。
551 61
我们做了比你更懂 Java 的 AI-Agent -- Arthas Agent
|
11天前
|
人工智能 安全 前端开发
阿里开源 Team 版 OpenClaw,5分钟完成本地安装
HiClaw 是 OpenClaw 的升级版,通过引入 Manager Agent 架构和分布式设计,解决了 OpenClaw 在安全性、多任务协作、移动端体验、记忆管理等方面的核心痛点。
1365 54
阿里开源 Team 版 OpenClaw,5分钟完成本地安装
|
25天前
|
JSON 缓存 API
美股实时行情与 K 线数据对接
本文详解如何用StockTV全球金融API快速接入美股实时行情、K线、指数及IPO等数据,支持NYSE/NASDAQ双交易所,提供REST/WS低延迟接口,涵盖个股、指数、涨跌榜等全场景,助开发者高效构建全球资产配置工具。(239字)
|
17天前
|
机器学习/深度学习 人工智能 JSON
AI 术语满天飞?90% 的人只懂名词,不懂为什么!
本文不堆砌概念,只讲前因后果:从大模型底层逻辑,到 Context、RAG、Function Calling、MCP、Skills 的核心关联,拆解所有面试高频考点,让你告别 “名词解释”,吃透原理,面试直接碾压面试官!
AI 术语满天飞?90% 的人只懂名词,不懂为什么!
|
3天前
|
文字识别 监控 数据可视化
把重复作业交给机器后,才明白1949ai聊的协同自动化工具到底省了多少无用功
本文介绍一位教务老师如何用开源自动化工具,将每日1.5小时重复工作(下载作业、分文件夹、录分数、发通知)全自动完成。全程无需编程,通过拖拽节点实现页面监控、文件处理、OCR识别与消息推送,兼顾隐私安全与低配电脑适配,展现协同自动化“所见即所得”的实用价值。(239字)
|
13小时前
|
人工智能 缓存 Linux
一次OpenClaw Token优化实录:我用AI把AI费用直降74%+阿里云/本地部署与模型配置完整版
在本地部署与云端运行OpenClaw的过程中,很多用户都会遇到一个共同问题:明明只是简单对话,Token消耗却异常夸张,积分与费用呈直线上升。我在使用OpenClaw本地客户端对接Claude模型时,仅发起一次简短对话就被扣除125积分,通过`/status`命令查看后发现,仅输入22个字符,系统却产生了**44000 Token**的上下文加载,缓存命中率为0%,所有内容均按全新Token全额计费。这意味着绝大多数成本并非消耗在有效对话,而是被无效文件、重复配置、冗余备份等隐性上下文占用。
58 8
|
13小时前
|
人工智能 JavaScript 数据挖掘
自媒体人必备OpenClaw使用手册:核心技能、阿里云/本地部署流程与免费模型配置教程
对于自媒体博主、短视频运营、公众号作者、内容策划及个人品牌打造者而言,高效的创作工具与自动化能力是提升内容产出效率、降低运营成本的关键。OpenClaw作为一款集成海量技能的AI工具平台,内置超13000项功能,覆盖内容创作、社媒运营、数据分析、自动化执行等全场景,但多数功能对自媒体从业者而言并非刚需。本文从海量技能中筛选出10项自媒体运营核心技能,同时详细说明2026年阿里云部署、本地MacOS/Linux/Windows11部署OpenClaw(Clawdbot)的完整流程,以及阿里云千问大模型API、免费Coding Plan API的配置方法,搭配实操代码与常见问题解答,帮助自媒体人快
45 5
|
12小时前
|
JavaScript API 开发工具
阿里云/本地部署OpenClaw 开发Skill插件指南:从入门到发布的全流程实操手册
OpenClaw的强大扩展性源于其开放的插件生态,2026年,插件市场已覆盖办公自动化、数据处理、多端交互等数千个场景,但个性化需求仍需自定义开发。无论是补充现有功能短板,还是实现特定业务流程自动化,插件开发都能让OpenClaw完全适配个人或团队的工作流。
34 4