304 lines
15 KiB
Plaintext
304 lines
15 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# 打开网页进行登陆"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"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",
|
||
"import numpy as np\n",
|
||
"import requests\n",
|
||
"import json\n",
|
||
"import time\n",
|
||
"import re\n",
|
||
"from datetime import datetime\n",
|
||
"from dateutil.relativedelta import relativedelta\n",
|
||
"from pathlib import Path\n",
|
||
"from urllib.parse import quote\n",
|
||
"from io import BytesIO\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",
|
||
"username = WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, r'//*[@id=\"pane-username\"]/form/div[1]/div/div[1]/input')))\n",
|
||
"enter = WebDriverWait(driver, 100).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": 10,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"files_path = r'C:\\Users\\admin\\Desktop\\202312爱义行数据迁移\\20231228F6提报数据\\最终导入文件\\套餐卡导入模板 - 已过期'"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 11,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# 生成 token,参数不需要修改\n",
|
||
"def generateToken() -> str:\n",
|
||
"\n",
|
||
" \"\"\" 生成 token \"\"\"\n",
|
||
"\n",
|
||
" token_api = 'https://api.dingtalk.com/v1.0/oauth2/accessToken'\n",
|
||
"\n",
|
||
" # 该信息在钉钉开放应用中\n",
|
||
" data = {\n",
|
||
" \"appKey\": \"ding5kqocon5s9oph5uq\",\n",
|
||
" \"appSecret\": 'HL1jgsIIfLAC0eTH0A1m4mwxUDqbgsiPeCCGGE3ocM6qJBTIW7Ivt9drxF_Z4Kb_'\n",
|
||
" }\n",
|
||
"\n",
|
||
" res = requests.post(token_api, json=data)\n",
|
||
" token = res.json()['accessToken']\n",
|
||
"\n",
|
||
" return token\n",
|
||
"\n",
|
||
"class NpEncoder(json.JSONEncoder):\n",
|
||
" def default(self, obj):\n",
|
||
" if isinstance(obj, np.integer):\n",
|
||
" return int(obj)\n",
|
||
" elif isinstance(obj, np.floating):\n",
|
||
" return float(obj)\n",
|
||
" elif isinstance(obj, np.ndarray):\n",
|
||
" return obj.tolist()\n",
|
||
" else:\n",
|
||
" return super(NpEncoder, self).default(obj)\n",
|
||
"\n",
|
||
"def ceshi(formData)-> str:\n",
|
||
" \"\"\" 处理流程开始 \"\"\"\n",
|
||
" TOKEN = generateToken()\n",
|
||
"\n",
|
||
" \"\"\" 通过实例id 获取表单内容 \"\"\"\n",
|
||
"\n",
|
||
" api = f'https://api.dingtalk.com//v1.0/yida/processes/instances/start'\n",
|
||
"\n",
|
||
" headers = {\n",
|
||
" \"Content-Type\": \"application/json\",\n",
|
||
" \"x-acs-dingtalk-access-token\": TOKEN\n",
|
||
" }\n",
|
||
" payload = {\n",
|
||
" \"appType\" : \"APP_TNVBVZ3K8G56HG03Z45Q\",\n",
|
||
" \"systemToken\" : \"CH7669818R0WN18TYTYJ42PE6GY22WZN0BYWKD1\",\n",
|
||
" \"userId\" : \"2268275546837446\",\n",
|
||
" \"language\" : \"zh_CN\",\n",
|
||
" \"formUuid\" : \"FORM-UP96637151Q3XIFU9NNW9BKFUVHU2XWN0EF9L84\",\n",
|
||
" \"formDataJson\" :json.dumps(formData, cls=NpEncoder),\n",
|
||
" \"processCode\" : \"TPROC--UP96637151Q3XIFU9NNW9BKFUVHU2YWN0EF9L94\",\n",
|
||
" \"departmentId\" : \"574140511\" # 560526483 2706271\n",
|
||
" }\n",
|
||
"\n",
|
||
" res = requests.post(api, headers=headers, json=payload)\n",
|
||
" res_new = res.json()\n",
|
||
" print(\"生成失败预警!\")\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"已经上传excel文件:65.xlsx!\n",
|
||
"导入文件已经进入导入记录中!\n",
|
||
"成功卡数:,失败卡数:\n",
|
||
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1823,lost_cards:13-#######################可以导入下一个文件!#######################\n",
|
||
"已经上传excel文件:66.xlsx!\n",
|
||
"导入文件已经进入导入记录中!\n",
|
||
"成功卡数:,失败卡数:\n",
|
||
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:2051,lost_cards:29-#######################可以导入下一个文件!#######################\n",
|
||
"已经上传excel文件:67.xlsx!\n",
|
||
"导入文件已经进入导入记录中!\n",
|
||
"成功卡数:,失败卡数:\n",
|
||
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1823,lost_cards:24-#######################可以导入下一个文件!#######################\n",
|
||
"已经上传excel文件:68.xlsx!\n",
|
||
"导入文件已经进入导入记录中!\n",
|
||
"成功卡数:,失败卡数:\n",
|
||
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1884,lost_cards:20-#######################可以导入下一个文件!#######################\n",
|
||
"已经上传excel文件:69.xlsx!\n",
|
||
"导入文件已经进入导入记录中!\n",
|
||
"成功卡数:,失败卡数:\n",
|
||
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1771,lost_cards:26-#######################可以导入下一个文件!#######################\n",
|
||
"已经上传excel文件:7.xlsx!\n",
|
||
"导入文件已经进入导入记录中!\n",
|
||
"成功卡数:,失败卡数:\n",
|
||
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1755,lost_cards:16-#######################可以导入下一个文件!#######################\n",
|
||
"已经上传excel文件:70.xlsx!\n",
|
||
"导入文件已经进入导入记录中!\n",
|
||
"成功卡数:,失败卡数:\n",
|
||
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:2217,lost_cards:17-#######################可以导入下一个文件!#######################\n",
|
||
"已经上传excel文件:71.xlsx!\n",
|
||
"导入文件已经进入导入记录中!\n",
|
||
"成功卡数:,失败卡数:\n",
|
||
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1847,lost_cards:28-#######################可以导入下一个文件!#######################\n",
|
||
"已经上传excel文件:72.xlsx!\n",
|
||
"导入文件已经进入导入记录中!\n",
|
||
"成功卡数:,失败卡数:\n",
|
||
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:2096,lost_cards:31-#######################可以导入下一个文件!#######################\n",
|
||
"已经上传excel文件:73.xlsx!\n",
|
||
"导入文件已经进入导入记录中!\n",
|
||
"成功卡数:,失败卡数:\n",
|
||
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:2064,lost_cards:20-#######################可以导入下一个文件!#######################\n",
|
||
"已经上传excel文件:74.xlsx!\n",
|
||
"导入文件已经进入导入记录中!\n",
|
||
"成功卡数:,失败卡数:\n",
|
||
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1923,lost_cards:23-#######################可以导入下一个文件!#######################\n",
|
||
"已经上传excel文件:75.xlsx!\n",
|
||
"导入文件已经进入导入记录中!\n",
|
||
"成功卡数:,失败卡数:\n",
|
||
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1278,lost_cards:25-#######################可以导入下一个文件!#######################\n",
|
||
"已经上传excel文件:8.xlsx!\n",
|
||
"导入文件已经进入导入记录中!\n",
|
||
"成功卡数:,失败卡数:\n",
|
||
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1902,lost_cards:25-#######################可以导入下一个文件!#######################\n",
|
||
"已经上传excel文件:9.xlsx!\n",
|
||
"导入文件已经进入导入记录中!\n",
|
||
"成功卡数:,失败卡数:\n",
|
||
"succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:,lost_cards:-succeed_cards:1953,lost_cards:16-#######################可以导入下一个文件!#######################\n",
|
||
"所有文件上传完成!\n",
|
||
"生成失败预警!\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# 开始批量导入\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, 100).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",
|
||
" time.sleep(5)\n",
|
||
" driver.refresh()\n",
|
||
" # 点击 查看导入记录 按钮\n",
|
||
" WebDriverWait(driver, 100).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, 100).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, 30).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, 30).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, 100).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",
|
||
" alen = 0\n",
|
||
" while succeed_cards == '' or lost_cards == '' or alen >=15:\n",
|
||
" alen = alen + 1\n",
|
||
" # 不断的关闭打开 导入记录 ,刷新页面\n",
|
||
" WebDriverWait(driver, 30).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, 30).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(30)\n",
|
||
" print(f'succeed_cards:{succeed_cards},lost_cards:{lost_cards}',end='-')\n",
|
||
"\n",
|
||
" print('#######################可以导入下一个文件!#######################')\n",
|
||
" # 关闭 导入记录 窗口\n",
|
||
" WebDriverWait(driver, 30).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",
|
||
" formData = {\n",
|
||
" \"textField_l9fe0uiw\": file,\n",
|
||
" \"textField_l9fe0uiv\": '套餐卡导入异常!!'\n",
|
||
" } \n",
|
||
" ceshi(formData)\n",
|
||
" continue\n",
|
||
" finally:\n",
|
||
" time.sleep(300) # 如果时间足够的话,保险起见可以多等一会\n",
|
||
"\n",
|
||
"print('所有文件上传完成!')\n",
|
||
"time.sleep(1)\n",
|
||
"formData = {\n",
|
||
" \"textField_l9fe0uiw\": '套餐卡数据导入完成!',\n",
|
||
" \"textField_l9fe0uiv\": '套餐卡数据导入完成!'\n",
|
||
" } \n",
|
||
"ceshi(formData)\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
|
||
}
|