feat: 增加打包处理

This commit is contained in:
fuzhongyun 2026-03-20 13:40:49 +08:00
parent 7b2d476b81
commit 3c5ac9432b
4 changed files with 72 additions and 80 deletions

View File

@ -65,6 +65,7 @@ Write-Host "[Step 5/6] Building executable..." -ForegroundColor Cyan
# 手动复制配置文件到发布目录 (比 --add-data 更直观,因为用户需要编辑)
Write-Host "Copying configuration files..." -ForegroundColor Gray
Copy-Item "product_map.txt" -Destination "dist\scbank_tool\" -Force
Copy-Item "config.txt" -Destination "dist\scbank_tool\" -Force
Copy-Item "使用说明.txt" -Destination "dist\scbank_tool\" -Force
if ($LASTEXITCODE -eq 0) {

View File

@ -6,8 +6,6 @@ class ChaojiyingClient:
def __init__(self, username, password, soft_id):
self.username = username
# 超级鹰要求密码经过 md5 加密
# self.password = md5(password.encode('utf-8')).hexdigest()
self.password = password
self.soft_id = soft_id
self.base_params = {

View File

@ -43,23 +43,7 @@ class SCBankCollector:
}
if not os.path.exists(config_file):
print(f"[WARN] 未找到配置文件 {config_file},将创建一个默认模板,请填写后重新运行。")
template = (
"# ==========================================\n"
"# 四川银行权益商城自动化工具 - 配置文件\n"
"# 请在等号 (=) 后面填写您的账号和密码\n"
"# 注意:等号前后可以有空格,但不要删除等号\n"
"# ==========================================\n\n"
"商城账号 = \n"
"商城密码 = \n\n"
"# --- 以下为验证码自动识别配置 (选填) ---\n"
"# 如果不填写,程序运行时将暂停并等待您手动输入验证码\n"
"超级鹰账号 = \n"
"超级鹰密码 = \n"
"超级鹰软件ID = 96001\n"
)
with open(config_file, "w", encoding="utf-8") as f:
f.write(template)
print(f"[ERROR] 未找到配置文件 {config_file},请确保该文件与程序在同一目录下。")
sys.exit(1)
try:
@ -134,7 +118,7 @@ class SCBankCollector:
"""自动识别并填写验证码"""
if not self.cjy_client:
self.log("[WARN] 未配置超级鹰账号,跳过自动识别验证码。请手动输入验证码。")
return False
return False, None
try:
self.log("尝试获取验证码图片...")
@ -154,6 +138,7 @@ class SCBankCollector:
if result and result.get('err_no') == 0:
code = result.get('pic_str')
pic_id = result.get('pic_id')
self.log(f"✅ 验证码识别成功: {code}")
# 填入验证码
@ -162,16 +147,16 @@ class SCBankCollector:
# 点击登录
self.log("尝试自动点击登录...")
self.page.locator('button.login-btn').click()
return True
return True, pic_id
else:
print(result)
err_str = result.get('err_str', '未知错误') if result else '返回为空'
self.log(f"❌ 验证码识别失败: {err_str}")
return False
return False, None
except Exception as e:
self.log(f"自动处理验证码发生异常: {e}")
return False
return False, None
def run(self):
try:
@ -207,15 +192,10 @@ class SCBankCollector:
while retry_count < max_retries and not login_success:
if self.cjy_client:
self.log(f"--- 第 {retry_count + 1} 次尝试登录 ---")
success = self._auto_solve_captcha()
success, pic_id = self._auto_solve_captcha()
if not success:
self.log("验证码识别失败,等待后重试...")
time.sleep(2)
# 点击验证码图片刷新
try:
self.page.locator('img.code-image').click()
time.sleep(1)
except: pass
self.log("验证码识别请求失败,等待后重试...")
time.sleep(1)
retry_count += 1
continue
else:
@ -224,30 +204,47 @@ class SCBankCollector:
# 等待 URL 包含 homePage (用户指定) 或者 错误提示出现
try:
# 使用 wait_for_url 或者检查是否有错误弹窗
# 这里等待较短时间,如果失败则重试
self.page.wait_for_url("**/homePage**", timeout=10000 if self.cjy_client else 0)
# 如果使用了超级鹰,缩短等待时间,因为错误提示出得很快
self.page.wait_for_url("**/homePage**", timeout=3000 if self.cjy_client else 0)
self.log("✅ 检测到登录成功!")
login_success = True
time.sleep(1)
except Exception as e:
if self.cjy_client:
self.log(f"登录等待超时或失败,可能验证码错误。")
# 验证码识别错误,按要求以 50% 的概率调用报错返分接口
if pic_id and random.random() < 0.8:
self.log(f"触发报错返分机制 (pic_id: {pic_id})...")
try:
self.cjy_client.report_error(pic_id)
self.log("报错返分请求已发送")
except Exception as re:
self.log(f"报错返分请求异常: {re}")
# 检查是否有错误提示 (比如 el-message)
try:
error_msg = self.page.locator('.el-message__content').inner_text(timeout=1000)
self.log(f"页面提示: {error_msg}")
# 刷新验证码图片
self.page.locator('img.code-image').click()
time.sleep(1)
except: pass
# 点击登录失败后,验证码会自动刷新,不需要手动点击刷新,稍微等待一下让新图片加载即可
time.sleep(1)
retry_count += 1
else:
self.log(f"登录等待超时或失败: {e}")
return
if not login_success:
self.log("[ERROR] 达到最大登录重试次数,放弃自动登录。请手动干预。")
return
self.log(f"[WARN] 达到最大自动登录重试次数 ({max_retries}次)。请在浏览器中手动输入验证码并完成登录!")
try:
# 退回到手动等待模式,无限制等待直到登录成功
self.page.wait_for_url("**/homePage**", timeout=0)
self.log("✅ 检测到手动登录成功!")
except Exception as e:
self.log(f"手动登录等待失败: {e}")
return
# 2. 强制跳转目标页
if "deliveryOrders" not in self.page.url:

View File

@ -1,51 +1,47 @@
========================================================================
四川银行权益商城自动化工具 - 使用说明
========================================================================
=== 四川银行权益商城自动化工具 使用说明 ===
一、 快速开始
一、首次使用准备
------------------------
1. 配置映射关系
打开文件夹中的 "product_map.txt",按里面的说明配置商品映射。
左边写四川银行的商品名右边写货易通对应的内部ID用 ">>>>" 隔开。
例如:洁丽雅采优四件套格格布鲁格格布鲁 >>>> JLY-3401
1. 确保您的电脑已连接互联网。
2. 确保您的电脑已安装 Google Chrome 或 Microsoft Edge 浏览器。
3. 双击运行文件夹中的 "scbank_tool.exe"。
4. 按照屏幕提示操作:
- 输入 "1" 并回车:启动采集。程序会自动打开浏览器,请登录后进入订单页面,自动下载待发货订单。
- 输入 "2" 并回车:启动处理。程序会自动读取抓取到的数据,上传到货易通系统,并生成 Excel 报表。
2. 填写账号配置
打开文件夹中的 "config.txt",在等号后面填写你的账号密码。
- 商城账号、商城密码为必填项。
- 如果你有“超级鹰”账号,填入超级鹰账号和密码,程序就能全自动识别验证码。
- 如果没有超级鹰,空着不填即可,程序运行到登录界面时会等你手动输入验证码。
二、 文件结构说明
3. 安装浏览器环境 (仅首次需要)
由于需要模拟浏览器操作,请确保电脑上安装了 Google Chrome 或 Microsoft Edge。
- scbank_tool.exe : 主程序,双击运行。
- product_map.txt : 商品名称映射配置文件 (文本文件,可用记事本编辑)。
- data/ : [自动生成] 存放采集到的原始数据 (.jsonl|.xls)。
- data/archive/ : [自动生成] 存放处理完成并归档的数据。
- output/ : [自动生成] 存放处理结果和 Excel 报表。
- error.log : [自动生成] 如果程序闪退或出错,错误信息会保存在这里。
二、日常使用流程
------------------------
双击运行 "scbank_tool.exe" (或者主程序快捷方式),会看到一个黑色的命令行窗口,根据提示操作即可。
三、 商品名称映射配置 (重要)
【步骤一:抓取订单】
1. 在窗口中输入 1 并回车。
2. 程序会自动打开浏览器,自动输入账号密码。
- (如果你配了超级鹰,它会自动填验证码并登录;如果没有配,请你手动输入验证码并点击登录)
3. 登录成功后,程序会自动跳转到“待发货”页面,自动点击批量发货并下载 Excel 文件。
4. 等待窗口提示“采集任务完成”,浏览器会自动留在原地,你可以关掉它。
如果商城显示的商品名称,与货易通系统中的商品名称不一致,会导致“商品匹配失败”。
此时,您需要手动编辑 "product_map.txt" 文件。
【步骤二:上传货易通】
1. 抓取完成后,在窗口中输入 2 并回车。
2. 程序会自动读取刚刚下载的 Excel 文件。
3. 它会根据你的 "product_map.txt" 自动把四川银行的商品转换成货易通的内部ID。
4. 自动上传到货易通系统。
5. 成功后,会在 output 目录下生成一个结果报表 (result_xxx.xlsx),你可以打开看看有没有失败的。
6. 处理过的原文件会被移动到 data/archive 目录下存档。
1. 用记事本打开 "product_map.txt"。
2. 在文件末尾添加一行规则。
3. 规则格式:
商城商品名称>>>>内部商品名称
三、常见问题
------------------------
1. 提示找不到配置文件?
请确保 config.txt 和 product_map.txt 与主程序在同一个文件夹内。
(注意:中间是四个大于号 >>>>)
2. 如果程序闪退怎么办?
程序运行中如果发生崩溃,错误信息会自动保存到 error.log 文件中,你可以发给开发人员查看。
4. 示例:
如果商城显示 "四川特产/老腊肉(500g)",而货易通系统叫 "精选老腊肉",则添加:
四川特产/老腊肉(500g)>>>>精选老腊肉
5. 保存文件后,重新运行程序即可生效。
四、 常见问题
Q: 程序一打开就闪退?
A: 请检查文件夹下是否生成了 error.log 文件,打开查看具体错误。通常是因为电脑没有安装 Chrome/Edge 浏览器,或者网络不通。
Q: 采集时浏览器没有自动翻页?
A: 请确保浏览器窗口保持在前台,不要最小化。如果页面加载过慢,程序可能会等待超时。
Q: 上传失败提示“未找到商品”?
A: 请检查 product_map.txt添加对应的名称映射规则。
3. 我可以自己放 Excel 进去吗?
可以。如果你自己从网页下载了待发货订单的 Excel.xls 或 .xlsx直接把它扔到 data 目录下,然后运行程序选 [2],它也能正常处理。