{ "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 }