5.18脚本更新

This commit is contained in:
2026-05-18 13:45:58 +08:00
parent cc4148b67d
commit b9977b9c13
8 changed files with 1251 additions and 679 deletions
@@ -1,12 +1,12 @@
import pandas as pd
import requests
from module import F6_module
import time
from tqdm import tqdm
from pathlib import Path
from datetime import datetime
import json
import traceback
import requests
import json
import time
from datetime import datetime
from tqdm import tqdm
import pandas as pd
import os
#+
# f6_module = F6_module()
@@ -15,23 +15,23 @@ import traceback
# username = "13799889725"
# password = "Lc1234"
# store_name = "禹城榕桦"
module = 2
module = 1
#
# res = f6_module.login_in(username, password, store_name)
# # cookies = requests.utils.dict_from_cookiejar(res.cookies)
cookies = {
'memberSESSIONID': '38d027b4-1f86-44fe-a8d2-2211fbd46394',
'memberSESSIONID': '639e52b2-1260-47a9-8d0b-d0cd41054738',
'erpLanguage': 'zh-CN',
'tmall': 'false',
'Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1775553704,1775799422,1776043595,1776153876',
'Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1776909170,1776923216,1777270359,1777277857',
'HMACCOUNT': 'A6A0585E8C70051D',
'prodOrg': '11240984669918128522',
'unp': '15851362811188895763',
'un': '15851362811188895763',
'_up': '-NillNN-qyBEJ--t3vnSknvoOF53yPCOts8N0no-Uu9VX_TGoZrQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_UXoIgm0QIF_PBRv-ZNHu3M-GTc1p2wFnGqpuxUiOMSmF_GORVsrEj92RzBn7rDYmA.',
'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2215851362811188895763%22%2C%22first_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%7D',
'Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1776393475',
'unp': '16023446149142708289',
'un': '16023446149142708289',
'_up': '-NillNN-qyBEJ--t3vnSknvoOF1_z_KJtMsE13I-XuVaVvnDr5DQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_QQq4Ml3wcK_PBRv-ZNHu3M-GTf3pqyEXOur-lciO8Yl1bLPBtmrEj90x3BhsH6PGY.',
'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2216023446149142708289%22%2C%22first_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%7D',
'prodOrg': '16070511835941490720',
'Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1777428810',
}
print("cookies loaded")
@@ -41,36 +41,98 @@ script_dir = Path(__file__).resolve().parent
output_base = script_dir / f"请求结果_{datetime.now():%Y%m%d_%H%M%S}"
df = pd.read_excel(fr"D:\Idea Project\F6+宜搭+其它(1)\张阳脚本\文件输出\车辆信息.xlsx",sheet_name="Sheet2").astype(str)
df = pd.read_excel(fr"C:\Users\hp_z66\Desktop\客户信息.xlsx",sheet_name="客户信息").astype(str)
if module == 1: # 客户信息删除
if module == 1: # 客户信息删除
# --- 初始化日志列表 ---
delete_logs = [] # 删除操作日志
query_logs = [] # 查询日志
# --- 1. 数据准备 ---
df['手机号码'] = df['手机号码'].astype(str).str.strip().str.replace('.0$', '', regex=True)
df['手机号码'].dropna(inplace=True)
url = "https://yunxiu.f6car.cn/member/customer/listForPermission?pageSize=50000&pageNo=1" # 获取客户信息列表
res = requests.get(url, cookies=cookies)
row = {"ts": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "module": module, "action": "customer_list", "url": url}
row["status_code"] = getattr(res, "status_code", None)
row["ok"] = getattr(res, "ok", None)
try:
row["response_json"] = json.dumps(res.json(), ensure_ascii=False)
except Exception:
# 将需要删除的手机号转为集合,查询速度更快
phones_to_delete = set(df['手机号码'].values)
print(f"待删除手机号数量: {len(phones_to_delete)}")
# --- 2. 分页查询所有客户 ---
base_url = "https://yunxiu.f6car.cn/member/customer/listForPermission"
id_own_org = "16070511835941490720"
page_size = 100
page_no = 1
all_customers = []
print("正在获取所有客户数据...")
while True:
params = {
"idOwnOrg": id_own_org,
"pageSize": page_size,
"pageNo": page_no
}
try:
row["response_text"] = res.text
except Exception:
row["response_text"] = None
request_results.append(row)
data = res.json()
for item in tqdm(data['data']['data']):
res = requests.get(base_url, params=params, cookies=cookies)
query_log = {
"ts": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"module": module,
"action": "customer_list_page",
"url": res.url,
"page_no": page_no
}
query_log["status_code"] = getattr(res, "status_code", None)
query_log["ok"] = getattr(res, "ok", None)
data = res.json()
query_log["response_json"] = json.dumps(data, ensure_ascii=False)
request_results.append(query_log)
query_logs.append(query_log)
# 获取当前页的数据列表
page_data = data.get('data', {}).get('data', [])
# 如果当前页没有数据了,说明已经取完,跳出循环
if not page_data:
print(f"{page_no} 页没有数据了,获取完毕。")
break
all_customers.extend(page_data)
print(f"已获取第 {page_no} 页,共 {len(page_data)} 条数据。累计获取: {len(all_customers)}")
page_no += 1
time.sleep(0.5)
except Exception as e:
print(f"获取第 {page_no} 页数据时出错: {e}")
error_log = {
"ts": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"module": module,
"action": "customer_list_error",
"page_no": page_no,
"error": str(e)
}
query_logs.append(error_log)
break
# --- 3. 遍历所有客户并执行删除 ---
print(f"开始处理删除操作,共需检查 {len(all_customers)} 个客户...")
success_count = 0
failed_count = 0
for item in tqdm(all_customers):
try:
idCustomer = item['idCustomer']
phone = item['cellPhone']
phone_clean = str(phone).strip().replace('.0', '')
if phone in df['手机号码'].values:
print("删除:", phone)
url = f"https://yunxiu.f6car.cn/member/customer/{idCustomer}" # 客户信息删除url
res = requests.delete(url, cookies=cookies) # 客户信息删除
row = {
# 检查手机号是否在待删除列表中
if phone_clean in phones_to_delete:
print(f"\n正在删除: {phone_clean}")
url = f"https://yunxiu.f6car.cn/member/customer/{idCustomer}"
# 记录删除开始
delete_log = {
"ts": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"module": module,
"action": "customer_delete",
@@ -78,23 +140,122 @@ if module == 1: # 客户信息删除
"idCustomer": idCustomer,
"cellPhone": phone_clean,
}
row["status_code"] = getattr(res, "status_code", None)
row["ok"] = getattr(res, "ok", None)
res = requests.delete(url, cookies=cookies)
delete_log["status_code"] = getattr(res, "status_code", None)
delete_log["ok"] = getattr(res, "ok", None)
# 解析响应
try:
row["response_json"] = json.dumps(res.json(), ensure_ascii=False)
response_data = res.json()
delete_log["response_json"] = json.dumps(response_data, ensure_ascii=False)
delete_log["response_code"] = response_data.get('code', '')
delete_log["response_msg"] = response_data.get('msg', '')
except Exception:
try:
row["response_text"] = res.text
except Exception:
row["response_text"] = None
request_results.append(row)
print(res.json(), idCustomer, phone)
delete_log["response_text"] = res.text
delete_log["response_code"] = ''
delete_log["response_msg"] = '响应解析失败'
# 判断删除是否成功
if res.ok and delete_log.get("response_code") == 200:
delete_log["delete_status"] = "成功"
success_count += 1
print(f"✓ 成功删除: {phone_clean}")
else:
delete_log["delete_status"] = "失败"
failed_count += 1
print(f"✗ 删除失败: {phone_clean}")
request_results.append(delete_log)
delete_logs.append(delete_log)
# 打印详细结果
try:
print(response_data)
except:
print(res.text[:200]) # 只打印前200个字符
time.sleep(3)
else:
# print("不删除:", phone)
pass
except:
idCustomer = item['idCustomer']
except Exception as e:
# 记录异常情况
error_log = {
"ts": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"module": module,
"action": "customer_delete_error",
"idCustomer": item.get('idCustomer', '未知'),
"cellPhone": phone_clean if 'phone_clean' in locals() else item.get('cellPhone', '未知'),
"error": str(e),
"delete_status": "异常"
}
delete_logs.append(error_log)
failed_count += 1
print(f"处理客户 {item.get('idCustomer', '未知')} 时出错: {e}")
# --- 4. 保存日志到Excel文件 ---
print("\n正在保存日志文件...")
# 创建日志目录
log_dir = "delete_logs"
if not os.path.exists(log_dir):
os.makedirs(log_dir)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
# 保存删除操作日志
if delete_logs:
df_delete_logs = pd.DataFrame(delete_logs)
# 选择要保存的列(可根据需要调整)
columns_to_save = [
"ts", "action", "idCustomer", "cellPhone",
"delete_status", "status_code", "ok",
"response_code", "response_msg", "error"
]
# 只保存存在的列
existing_columns = [col for col in columns_to_save if col in df_delete_logs.columns]
df_delete_logs = df_delete_logs[existing_columns]
delete_log_file = f"{log_dir}/删除操作日志_{timestamp}.xlsx"
df_delete_logs.to_excel(delete_log_file, index=False, engine='openpyxl')
print(f"删除操作日志已保存到: {delete_log_file}")
# 保存查询日志
if query_logs:
df_query_logs = pd.DataFrame(query_logs)
query_log_file = f"{log_dir}/查询日志_{timestamp}.xlsx"
df_query_logs.to_excel(query_log_file, index=False, engine='openpyxl')
print(f"查询日志已保存到: {query_log_file}")
# 保存汇总信息
summary_data = {
"项目": ["待删除手机号数量", "查询到的客户总数", "实际执行删除数", "删除成功", "删除失败", "执行时间"],
"数值": [
len(phones_to_delete),
len(all_customers),
success_count + failed_count,
success_count,
failed_count,
datetime.now().strftime("%Y-%m-%d %H:%M:%S")
]
}
df_summary = pd.DataFrame(summary_data)
summary_file = f"{log_dir}/删除汇总_{timestamp}.xlsx"
df_summary.to_excel(summary_file, index=False, engine='openpyxl')
print(f"删除汇总已保存到: {summary_file}")
# 打印最终统计
print("\n" + "=" * 50)
print("删除操作完成!")
print(f"待删除手机号: {len(phones_to_delete)}")
print(f"查询到客户总数: {len(all_customers)}")
print(f"实际执行删除: {success_count + failed_count}")
print(f"删除成功: {success_count}")
print(f"删除失败/异常: {failed_count}")
print(f"日志文件保存在: {log_dir}/ 目录下")
print("=" * 50)
if module == 2: # 客户车辆信息删除
for index, row in tqdm(df.iterrows(), total=len(df)):