Files
F6--/F6系统常用脚本/套餐卡自动化导入.ipynb
T
2026-01-30 11:28:35 +08:00

177 lines
11 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 打开网页进行登陆"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# 导入库\n",
"import os\n",
"from selenium import webdriver\n",
"from selenium.webdriver.common.keys import Keys\n",
"from selenium.webdriver.support import expected_conditions as EC\n",
"from selenium.webdriver.common.by import By\n",
"from selenium.webdriver.support.wait import WebDriverWait\n",
"import time\n",
"import pandas as pd\n",
"\n",
"# 账号密码 -- 需要修改\n",
"name = '15888265981'\n",
"password = 'Ff123456'\n",
"\n",
"driver = webdriver.Chrome(executable_path=r\"C:\\Users\\admin\\Desktop\\Python脚本\\chromedriver.exe\")\n",
"\n",
"driver.maximize_window() # 最大化浏览器窗口\n",
"real_https = 'https://m.f6car.cn/' # 正式网址\n",
"fake_https = 'https://m-trial.f6car.cn/' # 测试网址\n",
"# 打开网页,根据情况更改网址变量\n",
"driver.get(real_https)\n",
"\n",
"# 在输入框中输入账号和密码\n",
"username = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"pane-username\"]/form/div[1]/div/div[1]/input')))\n",
"enter = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"pane-username\"]/form/div[3]/div/button')))\n",
"username.clear()\n",
"username.send_keys(name)\n",
"driver.find_element_by_xpath(r'//*[@id=\"pane-username\"]/form/div[2]/div/div[1]/input').send_keys(password)\n",
"enter.click()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"ename": "TimeoutException",
"evalue": "Message: \n",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTimeoutException\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-2-9042f014b2b4>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;31m# 点击基础资料下拉菜单\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[0mWebDriverWait\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdriver\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m10\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0muntil\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mEC\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0melement_to_be_clickable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mBy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mXPATH\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34mr'//*[@id=\"user-nav\"]/ul/li[3]/a/span'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclick\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 5\u001b[0m \u001b[1;31m# 点击 数据导入 菜单项\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[0mWebDriverWait\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdriver\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m10\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0muntil\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mEC\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0melement_to_be_clickable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mBy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mXPATH\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34mr'//*[@id=\"user-nav\"]/ul/li[3]/ul/li[17]/a'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclick\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32mc:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\selenium\\webdriver\\support\\wait.py\u001b[0m in \u001b[0;36muntil\u001b[1;34m(self, method, message)\u001b[0m\n\u001b[0;32m 78\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mtime\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m>\u001b[0m \u001b[0mend_time\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 79\u001b[0m \u001b[1;32mbreak\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 80\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mTimeoutException\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmessage\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mscreen\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstacktrace\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 81\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 82\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0muntil_not\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmessage\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m''\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mTimeoutException\u001b[0m: Message: \n"
]
}
],
"source": [
"# 等待一点时间,手动选择门店\n",
"\n",
"# 点击基础资料下拉菜单\n",
"WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"user-nav\"]/ul/li[3]/a/span'))).click()\n",
"# 点击 数据导入 菜单项\n",
"WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"user-nav\"]/ul/li[3]/ul/li[17]/a'))).click()\n",
"# 点击 套餐卡信息 \n",
"WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"content\"]/div/div/ul/li[5]/a'))).click()\n",
"\n",
"\n",
" # 进入框架 iframe -- weixin-page-iframe ,方法1,可行(原等待时间 2 2 1)\n",
"time.sleep(0.5)\n",
"iframe = driver.find_element_by_xpath(r'//*[@id=\"weixin-page-iframe\"]')\n",
"time.sleep(1)\n",
"driver.switch_to.frame(iframe)\n",
"time.sleep(0.5)\n",
"print('已进入iframe 框架')\n",
"\n",
"files_path = r'C:\\Users\\admin\\Downloads\\套餐卡导入模板'\n",
"\n",
"# 开始批量导入\n",
"\n",
"for file in os.listdir(files_path):\n",
" try:\n",
" # 找到按钮里的 input 标签\n",
" to_input = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[1]/div/div/div/div[1]/input')\n",
" time.sleep(0.2)\n",
" upload_file = os.path.join(files_path,file)\n",
" to_input.send_keys(upload_file)\n",
" time.sleep(1)\n",
" # print(f'已经上传excel文件:{file}')\n",
" # 点击 立即导入按钮\n",
" WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[1]/div/button/span'))).click()\n",
" # 点击 查看导入记录 按钮\n",
" WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[2]/div/div[1]'))).click()\n",
" # 检查文件名\n",
" upload_file_name = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r' //*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[1]/div'))).text\n",
" time.sleep(0.5)\n",
" while upload_file_name != file:\n",
" # 关闭再打开 导入记录\n",
" WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[1]/button/i'))).click() # 关闭按钮\n",
" time.sleep(1)\n",
" WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[2]/div/div[1]'))).click() \n",
" time.sleep(1)\n",
" upload_file_name = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r' //*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[1]/div'))).text\n",
"\n",
" print('导入文件已经进入导入记录中!')\n",
"\n",
" # 打印卡导入 状态 信息\n",
" succeed_cards = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[3]/div').text \n",
" time.sleep(0.5)\n",
" lost_cards = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[4]/div').text \n",
" time.sleep(0.5)\n",
" print(f'成功卡数:{succeed_cards},失败卡数:{lost_cards}')\n",
" while succeed_cards == '' or lost_cards == '':\n",
" # 不断的关闭打开 导入记录 ,刷新页面\n",
" WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[1]/button/i'))).click() # 关闭按钮\n",
" time.sleep(1)\n",
" WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[2]/form/div[2]/div/div[1]'))).click() # 导入记录\n",
" time.sleep(1)\n",
" succeed_cards = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[3]/div').text \n",
" time.sleep(1)\n",
" lost_cards = driver.find_element_by_xpath(r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[4]/div').text \n",
" time.sleep(1)\n",
" print(f'succeed_cards:{succeed_cards},lost_cards:{lost_cards}',end='-')\n",
"\n",
" print()\n",
" print('#######################可以导入下一个文件!#######################')\n",
" # 关闭 导入记录 窗口\n",
" WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"app\"]/div/div/div/div[3]/div/div[1]/button/i'))).click()\n",
" except Exception as e :\n",
" print(f'{file} 导入出错')\n",
" print(repr(e))\n",
" continue\n",
" finally:\n",
" time.sleep(6) # 如果时间足够的话,保险起见可以多等一会\n",
"\n",
"print('所有文件上传完成!')\n",
"time.sleep(1)\n",
"# driver.close()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.9.4 ('F6processing')",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "f83923c7d0b4d2e003073efbd633777fa3fd66b7578149f24f67f4796b9b3ac4"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}