在企业财务流程中,最难自动化的环节之一是登录企业网银下载电子回单和交易流水。
网银系统出于资金安全的考虑,普遍采用了物理 UKey(网银盾)插槽校验,并要求输入每次动态变化的短信验证码。这使得纯粹的无人值守机器人无法在网银端顺利工作。
一、 人机协同(Human-in-the-loop)的登录方案
为了攻克这个壁垒,三函代码采用了一种人机协作的混合自动化架构:
[RPA 导航至网银登录页] ➔ [自动识别 UKey 状态] ➔ [触发验证码] ➔ [弹框提示出纳输入] ➔ [机器人接管下载]通过将“验证码提取”这一步交由现场出纳处理,既保留了网银的高安全性,又省去了后续繁琐的分页、点击和格式下载手工作业。
二、 核心 Playwright 短信验证码等待脚本
以下为核心人机协作脚本的实现细节:
import { chromium, Page } from 'playwright';
async function loginToBankWithUkey(page: Page, username: string) {
await page.goto('https://corporate.bank.example.com/login');
// 填写用户名
await page.fill('#corp-user-input', username);
// 触发获取短信验证码按钮
await page.click('#btn-send-sms');
console.log('已发送短信验证码,等待出纳输入...');
// 关键步骤:在控制台或本地 UI 弹窗提示输入,等待最长 90 秒
const verifyCode = await waitForUserVerificationCode();
// 填写验证码并点击登录
await page.fill('#sms-code-input', verifyCode);
await page.click('#btn-login');
// 等待进入控制台主页,完成登录对接
await page.waitForURL('**/dashboard');
console.log('登录成功,准备开始下载流水...');
}
// 模拟本地 UI 弹出框等待输入
function waitForUserVerificationCode(): Promise<string> {
return new Promise((resolve) => {
// 在实际应用中,这里会弹出一个漂亮的 Electron/Windows 悬浮窗
const readline = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
readline.question('请输入收到得短信验证码: ', (code: string) => {
resolve(code.trim());
readline.close();
});
});
}三、 网银流水格式清洗与对齐
下载下来的网银流水(多为 CSV 或 XLS 格式)往往字段缺失,且不同银行的栏位命名不尽相同。我们需要建立标准化清洗函数:
import pandas as pd
def normalize_bank_csv(file_path, bank_type):
df = pd.read_csv(file_path)
if bank_type == "ICBC": # 工商银行
df_clean = df.rename(columns={
"交易日期": "date",
"支出金额": "debit",
"收入金额": "credit",
"对方户名": "partner_name",
"摘要": "remark"
})
elif bank_type == "CCB": # 建设银行
df_clean = df.rename(columns={
"记账日期": "date",
"借方发生额": "debit",
"贷方发生额": "credit",
"对方名称": "partner_name",
"交易摘要": "remark"
})
else:
raise ValueError("未知的银行格式")
# 统一借贷方向
df_clean['amount'] = df_clean['credit'].fillna(0.0) - df_clean['debit'].fillna(0.0)
df_clean['date'] = pd.to_datetime(df_clean['date'])
return df_clean[['date', 'amount', 'partner_name', 'remark']]四、 结论
通过这种人机协同的设计,我们既不破坏企业网银严格的物理安全准则,又解放了人工后续几百笔明细账的一页页翻看和手工核对流程,实现了银企自动对账的高效闭环。