
影刀RPA SaaS订阅管理多平台付费账号统一监控作者林焱 | 适用人群影刀RPA新手 | 难度★★☆☆☆一、什么情况用这个公司订阅了几十个SaaS服务——Slack、Notion、Figma、GitHub、AWS、阿里云、Jira……每个服务有不同的付费周期月付/年付、不同的账号数、不同的到期日期。财务问「咱们一个月SaaS花多少钱」你打开七八个后台才能算出来。用影刀RPA定时登录各SaaS后台 → 抓取订阅信息 → 统一汇总到Excel → 到期自动提醒 → 不用的账号自动发现僵尸账号。一张表看清所有SaaS开销。实际场景SaaS费用核算、订阅续费管理、僵尸账号清理、部门费用分摊。这篇文章能解决的问题自动采集多平台订阅信息SaaS费用统一汇总不活跃账号自动发现续费提醒二、怎么做拼多多店群自动化上架方案2.1 SaaS台账设计在Excel中维护SaaS订阅台账服务名称付费计划费用币种付费周期到期日账号数管理员后台地址SlackPro$8/人USD月付2024-07-1550张三slack.com/adminNotionTeam$10/人USD年付2024-12-0130李四notion.so/settings阿里云按量—CNY月结——王五cdn.console.aliyun.com2.2 影刀主流程┌──────────────────────────────────────────────┐ │ ① 【读取Excel】 │ │ 读取SaaS台账 │ │ ↓ │ │ ② 【遍历列表】 │ │ 对每个SaaS服务采集订阅信息 │ │ ↓ │ │ ③-⑧ 各平台采集 │ │ Slack→Notion→GitHub→AWS→阿里云→... │  │ ↓ │ │ ⑨ 【执行Python代码】 │ │ 汇总费用、换算币种 │ │ ↓ │ │ ⑩ 【写入Excel 通知】 │ │ 生成SaaS费用月报到期预警 │ └──────────────────────────────────────────────┘2.3 核心代码步骤⑨费用汇总importjsonfromdatetimeimportdatetime,timedelta subscriptionssaas_data# 从影刀采集的数据# 汇率表每月更新 EXCHANGE_RATES{USD:7.25,# 1美元 7.25人民币EUR:7.90,JPY:0.048,}defsummarize_saas_costs(subscriptions):汇总SaaS费用todaydatetime.now().date()total_cny0monthly_cost_cny0expiring_soon[]details[]forsubinsubscriptions:amountfloat(sub.get(费用,0).replace($,).replace(,,))currencysub.get(币种,CNY)cyclesub.get(付费周期,月付)# 换算人民币rateEXCHANGE_RATES.get(currency,1.0)amount_cnyround(amount*rate,2)# 计算月均成本ifcycle年付:monthly_cnyround(amount_cny/12,2)elifcycle季付:monthly_cnyround(amount_cny/3,2)else:# 月付monthly_cnyamount_cny monthly_cost_cnymonthly_cny total_cnyamount_cny details.append({服务名称:sub[服务名称],计划:sub.get(付费计划,),金额(原币):f{amount:.2f}{currency},金额(CNY):amount_cny,月均(CNY):monthly_cny,付费周期:cycle,账号数:sub.get(账号数,0),})# 到期提醒expiry_strsub.get(到期日,)ifexpiry_strandexpiry_str!—:try:expiry_datedatetime.strptime(expiry_str,%Y-%m-%d).date()days_left(expiry_date-today).daysifdays_left30:expiring_soon.append({**sub,days_left:days_left,renewal_cost_cny:amount_cny,})except:passsummary{report_date:today.strftime(%Y-%m-%d),total_services:len(subscriptions),monthly_cost_cny:round(monthly_cost_cny,2),details:details,expiring_soon:expiring_soon,}returnsummary resultsummarize_saas_costs(subscriptions)outputjson.dumps(result,ensure_asciiFalse)2.4 僵尸账号检测defdetect_zombie_accounts(service_name,admin_url):检测不活跃的账号# 以Slack为例抓取过去30天未活跃的用户# 【打开网页】→ Slack管理后台# 【获取表格数据】→ 用户活跃度列表# 模拟返回users[{name:张三,last_active:2024-07-01,status:活跃},{name:李四,last_active:2024-05-15,status:僵尸},{name:王五,last_active:2024-03-01,status:僵尸},]todaydatetime.now().date()zombies[]foruserinusers:last_active_struser[last_active]try:last_activedatetime.strptime(last_active_str,%Y-%m-%d).date()days_inactive(today-last_active).daysifdays_inactive30:user[days_inactive]days_inactive user[suggested_action]建议停用ifdays_inactive90else确认是否仍需zombies.append(user)except:passreturnzombies# 如果检测到僵尸账号发送通知给管理员# 「Slack有2个账号超过30天未活跃请确认是否需要停用以节省费用」2.5 费用分摊如果SaaS费用需要按部门分摊defallocate_cost_by_department(subscription,department_usage):按部门使用量分摊费用total_userssum(department_usage.values())allocation{}fordept,usersindepartment_usage.items():ratiousers/total_users costround(subscription[月均(CNY)]*ratio,2)allocation[dept]{users:users,ratio:f{ratio*100:.1f}%,cost_cny:cost,}returnallocation三、有什么坑坑1每个SaaS后台的登录方式不同有的用邮箱密码有的用SSO单点登录有的用Google/Microsoft账号。影刀做自动化登录时每个平台要单独写一套登录流程。实用建议优先选择支持API的SaaS通过API获取账单不需要登录后台次选用网页自动化抓取。坑2按量付费的费用波动TEMU店群如何管理运营AWS/阿里云这种按量付费的费用每个月都变。影刀采集到的是一个快照不是精确的月结单。建议每月1号从云服务商下载上月的账单CSV文件拿精确数据。坑3汇率波动如果SaaS用的是外币付费USD/EUR人民币价格会随汇率波动。建议每月用固定汇率如月初央行中间价做换算保持可比性。# 每月更新一次汇率defload_monthly_rates():加载当月汇率# 可以从央行API或手工录入return{USD:7.25,EUR:7.90,}坑4个别平台的抓取不稳定有些SaaS后台的网页结构经常变化XPath定位元素容易失效。这类不稳定的平台考虑用人肉维护代替自动抓取——每个月打开后台看一眼手动更新台账。坑5权限和安全用影刀登录SaaS后台意味着影刀要有管理员的账号密码。这是安全隐患。建议给影刀专门开一个「只读管理员」账号如果有的话或者用API Token代替密码更安全不要用超级管理员账号跑影刀流程总结SaaS订阅管理的核心是「统一台账 定时刷新 费用汇总」。优先用API获取数据次选网页抓取。注意汇率换算、按量付费的费用波动、以及僵尸账号的清理。给影刀单独建一个只读管理员账号。