{ "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\u001b[0m in \u001b[0;36m\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 }