feat: 增加打包处理
This commit is contained in:
parent
7b2d476b81
commit
3c5ac9432b
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 = {
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
80
使用说明.txt
80
使用说明.txt
|
|
@ -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],它也能正常处理。
|
||||
|
|
|
|||
Loading…
Reference in New Issue