一个人写了一套店群矩阵自动化软件:我是如何干掉繁琐切号流程的

我是林焱RPA,一个靠给店群老板“做减法”活着的独立开发者。
去年秋天,一个做拼多多店群的老哥提了两瓶茅台来找我,
不是叙旧,是求救。
他把财务报表往桌上一摊:
运营团队十二个人,月薪加社保十万出头,
管理、工位、水电再加三万,
每个月固定支出十三万多。

他手里两百多家店铺,
每天的工作就是从早到晚切号、登录、上架、对账,
人困马乏,错漏百出,
封店罚款还得另算。

他说:“我这不是做生意,是给员工打工。
你能不能帮我做个软件,
把切号、登录这些破事儿全自动了,
我不想再养那么多只会点点点的人了。”

我花了三个多月,
从 Python 底层搭了一套 Alien 店群自动化管理系统
用影刀 RPA 搭流程,
PyQt6 做桌面 UI,
打包成双击即用的 exe。
上线两个月后,
他的运营从十二个人裁到两个兼职,
月度人力支出从十三万直接压到一万出头,

picture.image 砍了九成多。
切号这个动作,
从运营的日常里彻底消失了。

picture.image 今天这篇复盘,
我就把“干掉切号”这件事,
从环境隔离、批量配置、自动化流程到并发调度,

完整拆开讲给你听。
没有高深理论,
全是一线实战和真金白银换来的经验。


一、切号:店群工作室最反人类的日常,也是最烧钱的地方

我进到那个工作室的第一天,
没有急着看代码,
而是搬了把椅子坐在角落,
观察了整整一个上午。
十二个人,分成三组,
一组管食品店,一组管百货店,
还有一组专门养新店。

早上八点半,全员开机,
打开一排指纹浏览器,
对着 Excel 表格开始挨个登录店铺。
有些号掉线了,
要重新输密码、过验证码;
有些代理不通,
要去代理后台切换 IP;
有些 Cookie 过期,
要清理了再登录。
光“切号验号”这个环节,
十二个人里有五个是从早上做到中午的。

picture.image

picture.image 切号的时候,
运营们精神高度紧张,
因为十几个长得几乎一样的浏览器窗口,
切错一个,
A 店的 Cookie 就可能用到 B 店,
平台立刻判定关联,
轻则限制功能,重则整个 IP 段下所有店灰屏。
手抖一次,可能就是几万块的损失。

算一笔账:
这五个切号的人,每人月薪六千,
加上社保、管理成本,一个月就是近四万。
而他们的工作,说到底就是“切换窗口、验证登录”,
毫无技术含量,却又不得不做。
更可怕的是,这种机械劳动留不住人,
新员工培训两周刚上手就想跑,
老板每个月还要花时间招人、面试。
隐性成本比账面数字高得多。

我看完这一上午,
心里就一个念头:
要想省人力,
必须先把切号这个动作从地球上抹掉。
让软件去管店铺环境,
让人永远不再碰“切换”这件事。


二、环境管理中心:让切号从运营的字典里消失,直接省掉五个人

我做的第一个模块,
就是 “环境管理中心”
它的任务只有一个:
每个店铺拥有一个独立且永久的“虚拟电脑”,
不需要切换,不可能串号。

2.1 把店铺装进卡片,一眼看尽所有状态

打开 Alien 软件,
左侧是自定义分组树,
“食品店”、“百货店”、“美区 TK”,
右侧是一张张环境卡片,
每张卡片就是一个店铺的独立运行环境。
卡片上显示店铺 ID、绑定的代理 IP、
地区国旗、指纹版本,
还有一个显眼的状态灯——
绿灯代表在线且正常,
红灯代表掉线或异常。
运营扫一眼,
就知道哪些店需要关注,
再也不用在几十个窗口里翻找。

这个设计,
直接干掉了“每天逐个检查店铺登录状态”的环节,
那五个切号的人,
发现自己每天上午的工作,
变成了软件里几秒钟的“扫一眼”。

2.2 物理隔离,从根本上消灭串号,也消灭了封店罚款

传统切号为什么容易出错?
因为所有店铺跑在同一个浏览器内核上,
只是换了 Cookie 和代理,
磁盘缓存、GPU 渲染、字体列表全搅在一起,
手一抖就串了。
一旦串号封店,
不仅损失店铺,
还要搭上申诉的时间成本,
甚至整个 IP 段都被拉黑,
连带损失难以估量。

我的做法是,
为每个店铺创建一个完全独立的物理文件夹,
里面存放独立的浏览器缓存、
Cookie、LocalStorage、
随机生成的指纹参数、专属代理配置。
不同店铺的文件夹绝不交叉,
连 GPU 着色器缓存都物理分开。
启动浏览器时,
强制加上 --user-data-dir 指向这个独享目录,
这样平台扫描电脑,
只能看到一个个独立的用户数据容器,
根本分不清是不是同一台设备。

下面是创建独立环境的核心代码,
它让每个店铺都住进了独栋别墅,
也让“切换窗口”和“关联封店”变成了历史:

import uuid, json, random
from pathlib import Path

class AlienEnvironment:
    """创建一个物理隔离的店铺运行环境"""
    def __init__(self, shop_id, proxy, geo):
        self.shop_id = shop_id
        # 唯一环境 ID,加随机码防止碰撞
        self.env_id = f"env_{shop_id}_{uuid.uuid4().hex[:8]}"
        self.root = Path(f"./envs/{self.env_id}")
        self.root.mkdir(parents=True, exist_ok=True)

        # 独立的浏览器数据目录,物理隔离核心
        self.browser_data = self.root / "browser_data"
        self.browser_data.mkdir(exist_ok=True)

        # 随机化指纹,防止批量同特征
        self.fingerprint = {
            "screen_width": random.choice([1920, 1366, 1536]),
            "screen_height": random.choice([1080, 768, 864]),
            "timezone": geo.get("tz", "UTC"),
            "language": geo.get("lang", "en-US"),
            "webgl_vendor": random.choice(["Google Inc.", "Intel Inc."]),
            "fonts": random.sample(["Arial","Verdana","SimSun","Microsoft YaHei"], 3)
        }
        self.proxy = proxy

        # 保存配置
        with open(self.root / "config.json", "w") as f:
            json.dump({
                "proxy": proxy,
                "fingerprint": self.fingerprint
            }, f, indent=2)

有了这套物理隔离,
你要操作哪个店,
就在环境卡片上双击,
弹出一个带完整指纹的独立浏览器,
用完关闭,
资源自动回收。
每次操作都在一个完全隔离的一次性空间里,
想串号?
物理上就不可能。
那五个专门负责切号的人,
发现自己的工作被一个“双击”彻底取代了。

2.3 批量导入:一分钟武装几百个店铺,省掉配置岗

过去,新开一个店铺,
运营要手动填代理、调时区、导 Cookie,
一个店折腾十几二十分钟。
一百个新店,
两三个人要忙一整天,
还容易填错参数。

我给了老板一个 Excel 模板,
按列填入店铺账号、密码、代理地址,
拖进 Alien 窗口,
后台就会自动循环创建环境,
代理随机分配,
指纹随机生成,
几百个店的环境,
十分钟全部就绪。
原来专门负责配置新店的那一个人,
也省了。

环境管理中心上线后,
老板直接把原来专门切号和配置环境的六个人,
调岗或辞退。
因为她们的工作,
已经变成了软件里的一次“批量导入”和一次“双击”。


三、自动化编排流:让剩下的运营从“操作工”变“监工”,再省四个人

切号被干掉了,
但店群每天还有大量重复操作:
领券、签到、做活动、上架商品。
这些活原先占用了六个运营一整个下午。
我要让这些也全自动跑起来。

3.1 影刀搭流程,Alien 来执行

我选择用影刀 RPA 当流程设计器,
运营在影刀里像搭积木一样拖出流程:
打开活动页 → 等待加载 → 点击参加 → 截图 → 关闭。
搭好的流程导出为 JSON 指令集,
导入到 Alien 的 “自动化编排流” 面板。

面板上方是流程模板卡片,
下方是环境列表。
老板勾选一个流程,
再勾选一批店铺环境,
设一个最大并发数,比如 22,
点击开始,
系统就会把同一个流程分发到几十个独立环境里同时跑,
每个店铺在自己的独栋里干活,
互不干扰。
这就是任务与环境的多对多匹配——
一次编排,永久复用,
再不用一个人一个人地去操作。

3.2 并发调度与内存回收:无人值守的关键,省掉夜班岗

自动化跑起来之后,
最大的坑是稳定性。
如果不稳,
还得专门留人值夜班盯着,
那省人的效果就大打折扣。
我第一次压测的时候,
开了 30 个并发窗口跑上架流程,
前五分钟,内存稳稳的 35%。
我起身泡了杯茶,
回来一看,
内存已经飙到 92%,
还在往上窜。
几秒后,
系统假死,
远程桌面断连。
重启后查日志,
每个窗口关闭后,
浏览器驱动子进程还赖在后台,
一个吃 300 多兆内存,
30 个泄漏了近 10G。
这就是典型的“资源没回收”,
逼得人必须半夜盯着重启。

我连夜重写了调度器,
在任务结束的 finally 块里,
强制扫描系统所有进程,
把命令行中包含该环境 ID 的进程,
全部 kill 掉。
下面这版调度核心,
用槽位式补充和强制回收,
彻底消灭了僵尸进程,
也消灭了夜班盯屏岗:

import psutil
from concurrent.futures import ThreadPoolExecutor, wait, FIRST_COMPLETED
from queue import Queue

class AlienScheduler:
    """槽位式并发调度器,强制进程回收"""
    def __init__(self, max_workers=22):
        self.max_workers = max_workers
        self.queue = Queue()

    def add_batch(self, envs, flow):
        for env in envs:
            self.queue.put((env, flow))

    def run(self):
        with ThreadPoolExecutor(max_workers=self.max_workers) as pool:
            futures = set()
            while not self.queue.empty() or futures:
                # 有空槽位才补充新任务,绝不超载
                while len(futures) < self.max_workers and not self.queue.empty():
                    env, flow = self.queue.get()
                    futures.add(pool.submit(self._execute_with_cleanup, env, flow))

                if futures:
                    done, futures = wait(futures, return_when=FIRST_COMPLETED)

    def _execute_with_cleanup(self, env, flow):
        try:
            AlienFlowRunner(env).execute(flow)
        finally:
            # 强制杀死该环境的所有残留进程
            for proc in psutil.process_iter(['cmdline']):
                try:
                    if proc.info['cmdline'] and env.env_id in str(proc.info['cmdline']):
                        proc.kill()
                except:
                    pass

这版上线后,
22 窗口并发,
内存稳定在 60% 以内,
可以连续跑好几天不崩。
夜班盯屏幕的岗位,
直接被砍掉了。

3.3 傻瓜式上架,一个人监督两百店

留下的运营,
工作内容彻底变了。
以前她们复制粘贴上架,
现在只需在影刀里搭好流程,
导入 Alien,
绑定环境,
设好并发数,
点执行。
剩下的时间,
她们只做两件事:
看看监控面板上有没有红色异常方块,
偶尔处理一下验证码。
从“操作工”变成了“监督员”,
而且一个人就能监督两百多个店。

实际跑起来的场景:
拼多多批量上架,
以前七个运营干一下午,
现在 Alien 并发 20,
一个晚上近千个商品全上完。
这七个人里,
四个直接省掉,
剩下三个转去做选品和客服,
人力成本大幅下降,
员工工资反而涨了。


四、工程封装:让老板双击 exe,直接告别人肉操作

技术做得再好,
如果需要客户装 Python、配环境,
那在老板眼里就是“不靠谱”。
我的交付标准只有一条:双击 exe 就能用

4.1 PyQt6 极简界面,零培训上手

我用 PyQt6 手写了整个 GUI,
分组树、环境卡片流、流程编辑区、实时日志,
全在一个窗口里。
配色沉稳,按钮有状态反馈,
执行时卡片有呼吸灯,
出错变红并一键定位日志。
老板第一次打开,
自己摸索十分钟就上手了,
培训成本几乎为零。
这也是降本的一部分——
连学习成本都帮你省了。

4.2 黑盒打包与安全授权

我用 PyInstaller 把 Python 环境、
浏览器内核、影刀流程解析器、指纹库,
全部打成一个 exe,
客户拿到手,拷到电脑上双击就能打开。
授权验证在 GUI 引导页完成,
绑定机器码,安全又简单。
这意味着,
老板拿到的是一个完整的商业产品,
而不是需要技术员维护的半成品。

交付后,
那个老板的运营工作室,
从挤满十二个人,
变成只有两台服务器在默默运转,
两个兼职偶尔看下屏幕。
他终于在晚上十点前关手机睡觉了。


五、写在最后:干掉切号,只是开始

我经常深夜维护完代码,
看着控制台里一排排绿色的“执行成功”,
想起那个曾经被切号折磨到崩溃的老板,
现在终于能安心去跑供应链、看新品,
而不是天天盯着员工别切错号。

很多人觉得自动化就是抢人饭碗,
但真正好的自动化,
是让机械的事交给机器,
让人去做人该做的事——
选品、策划、创意、决策。
那个老板把省下来的运营,
一部分转去做内容和精细化运营,
员工工资反而涨了。
这才是良性的降本增效。

我是林焱RPA,
还在继续迭代 Alien,
下一步准备做分布式多机协同,
让上千个店铺也能丝滑运转。
如果你也在被高人力成本折磨,
或者想聊聊怎么用底层技术省人省钱,
欢迎评论区交流。
一个人写的代码,
能帮一群人从重复劳动里解放出来,
这事,挺酷的。

本文所有代码均为脱敏后的工程片段,
完整架构设计与商业合作欢迎私信。
技术最有温度的时刻,
是让人终于能活得像人。

0
0
0
0
评论
未登录
暂无评论