Files
F6--/张阳脚本/F6汽车系统/车辆信息vin解析.py
2026-01-30 11:28:35 +08:00

152 lines
4.9 KiB
Python

# -*- coding: UTF-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import time
import pandas as pd
import logging
from tqdm import tqdm
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler("automation.log"),
logging.StreamHandler()
]
)
# 基础信息
USERNAME = '13690727570'
PASSWORD = 'Jz112233'
EXCEL_PATH = r"C:\Users\zy187\Desktop\查询车辆id.xls"
CHROME_DRIVER_PATH = r"D:\ProgramTools\chromedriver-win64\chromedriver.exe"
BASE_URL = 'https://m.f6car.cn/'
# 初始化 Chrome
def init_driver():
options = webdriver.ChromeOptions()
# options.add_argument('--headless') # 无头模式
options.add_argument('--start-maximized')
service = ChromeService(executable_path=CHROME_DRIVER_PATH)
driver = webdriver.Chrome(service=service, options=options)
driver.implicitly_wait(5)
return driver
# 登录
def login(driver):
try:
driver.get(BASE_URL)
username = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="pane-username"]/form/div[1]/div/div[1]/input'))
)
password = driver.find_element(By.XPATH, '//*[@id="pane-username"]/form/div[2]/div/div[1]/input')
submit = driver.find_element(By.XPATH, '//*[@id="pane-username"]/form/div[3]/div/button')
username.clear()
username.send_keys(USERNAME)
password.send_keys(PASSWORD)
submit.click()
logging.info("登录成功")
# 选择公司
# company = WebDriverWait(driver, 10).until(
# EC.element_to_be_clickable((By.XPATH, "//*[text()='F6汽车科技数据组测试(废弃)']"))
# )
# company.click()
# time.sleep(5) # 等待页面加载
logging.info("进入公司页面")
except Exception as e:
logging.error(f"登录失败: {e}")
raise
# 处理 Excel 数据
def process_excel_data(file_path):
try:
df = pd.read_excel(file_path)
logging.info(f"成功读取 Excel 文件,共 {len(df)} 条数据")
return df
except Exception as e:
logging.error(f"读取 Excel 失败: {e}")
raise
# 处理单条数据
def process_single_record(driver, id_member,vin):
try:
# 处理可能的弹窗
try:
next_btn = driver.find_element(By.XPATH, "//*[text()=' 下一步']")
next_btn.click()
time.sleep(1)
know_btn = driver.find_element(By.XPATH, "//*[text()=' 我知道了']")
know_btn.click()
except:
pass
url = f'https://yunxiu.f6car.cn/kzf6/member/index.do?page=/view/index.html%23/car/edit/{id_member}'
driver.get(url)
time.sleep(1)
# 点击 VIN 输入框
vin_input = driver.find_element(By.XPATH, '//*[@id="app"]/div[1]/div[2]/div/div[2]/div[1]/form/div[2]/div[3]/div/div/div/input')
vin_input.send_keys(Keys.CONTROL, 'a')
vin_input.send_keys(Keys.BACK_SPACE)
vin_input.send_keys(vin)
time.sleep(1)
# 处理车牌输入框(如果有)
try:
plate_input = driver.find_element(By.XPATH, '//*[@maxlength="4"]')
plate_input.click()
time.sleep(1)
vin_input.click()
except:
pass
# 处理可能的确认弹窗
try:
confirm_btn = driver.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/button[1]/span')
confirm_btn.click()
time.sleep(1)
except:
pass
# 滚动到底部并保存
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
time.sleep(1)
save_btn = driver.find_element(By.XPATH, "//*[text()='保存']")
save_btn.click()
time.sleep(1)
logging.info(f"处理成功: ID={id_member}")
except Exception as e:
logging.error(f"处理失败: ID={id_member}, 错误: {e}")
pass
# 主函数
def main():
driver = None
try:
driver = init_driver()
login(driver)
df = process_excel_data(EXCEL_PATH)
for index, row in tqdm(df.iterrows(), total=len(df), desc="处理数据"):
id_member = str(row[0]) # 假设第一列是 ID
vin = str(row[2])
process_single_record(driver, id_member, vin)
except Exception as e:
logging.error(f"程序运行出错: {e}")
finally:
if driver:
driver.quit()
logging.info("程序结束")
if __name__ == "__main__":
main()