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

177 lines
11 KiB
Plaintext
Raw Permalink 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
}