Python Selenium 自动化下载考后核验照片并分类存储
import\x20os\nimport\x20time\nimport\x20psutil\nfrom\x20selenium.webdriver.chrome.options\x20import\x20Options\nfrom\x20selenium\x20import\x20webdriver\nfrom\x20selenium.webdriver.common.by\x20import\x20By\nimport\x20openpyxl\nimport\x20requests\n\n#\x20检查是否已经存在浏览器实例,如果存在则不再创建\nfor\x20proc\x20in\x20psutil.process_iter():\n\x20\x20try:\n\x20\x20\x20\x20if\x20"chrome"\x20in\x20proc.name()\x20and\x20"--remote-debugging-port=9224"\x20in\x20proc.cmdline():\n\x20\x20\x20\x20\x20\x20options\x20=\x20Options()\n\x20\x20\x20\x20\x20\x20options.add_experimental_option("debuggerAddress",\x20"127.0.0.1:9224")\n\x20\x20\x20\x20\x20\x20break\n\x20\x20except:\n\x20\x20\x20\x20pass\nelse:\n\x20\x20#\x20创建浏览器实例\n\x20\x20os.system(r'start\x20chrome\x20--remote-debugging-port=9224\x20--user-data-dir="D:\评阅用"')\n\x20\x20options\x20=\x20Options()\n\x20\x20options.add_experimental_option("debuggerAddress",\x20"127.0.0.1:9224")\n\n#\x20在已有的浏览器实例中查找标签页\ndriver\x20=\x20webdriver.Chrome(options=options)\ntabs\x20=\x20driver.window_handles\nfor\x20tab\x20in\x20tabs:\n\x20\x20driver.switch_to.window(tab)\n\x20\x20if\x20driver.title\x20==\x20"考后核验":\n\x20\x20\x20\x20print("登陆成功")\n\x20\x20\x20\x20break\n\n#\x20打开Excel表格\nwb\x20=\x20openpyxl.load_workbook(r"C:\Users\Administrator\Desktop\考后核验.xlsx")\nsheet\x20=\x20wb.active\n\n#\x20创建照片文件夹\nphoto_folder\x20=\x20r"C:\Users\Administrator\Desktop\照片"\nif\x20not\x20os.path.exists(photo_folder):\n\x20\x20os.mkdir(photo_folder)\n\n#\x20遍历时间单元K列\ntime_set\x20=\x20set()\nroom_dict\x20=\x20{}\x20#\x20存储考场编号和对应的文件夹路径\nfor\x20row\x20in\x20sheet.iter_rows(min_row=2,\x20max_row=sheet.max_row,\x20min_col=11,\x20max_col=11):\n\x20\x20for\x20cell\x20in\x20row:\n\x20\x20\x20\x20#\x20获取时间单元内的数据\n\x20\x20\x20\x20data\x20=\x20cell.value\n\x20\x20\x20\x20if\x20data:\n\x20\x20\x20\x20\x20\x20time_set.add(data)\n\n#\x20创建子文件夹\nfor\x20data\x20in\x20time_set:\n\x20\x20folder_name\x20=\x20time.strftime("%Y-%m-%d\x20%H-%M-%S",\x20time.strptime(data,\x20"%Y-%m-%d\x20%H:%M:%S"))\n\x20\x20folder_path\x20=\x20os.path.join(photo_folder,\x20folder_name)\n\x20\x20if\x20not\x20os.path.exists(folder_path):\n\x20\x20\x20\x20os.mkdir(folder_path)\n\x20\x20room_number\x20=\x20driver.find_element(By.XPATH,\x20'//td[@class="ant-table-column-has-actions\x20ant-table-column-has-sorters"\x20and\x20@style="text-align:\x20center;"]')\n\x20\x20room_number\x20=\x20room_number.text\n\x20\x20room_folder\x20=\x20os.path.join(folder_path,\x20room_number)\n\x20\x20if\x20not\x20os.path.exists(room_folder):\n\x20\x20\x20\x20os.mkdir(room_folder)\n\x20\x20room_dict[room_number]\x20=\x20room_folder\n\n#\x20遍历表格内"A"列数据\nfor\x20row\x20in\x20sheet.iter_rows(min_row=2,\x20max_row=sheet.max_row,\x20min_col=1,\x20max_col=1):\n\x20\x20for\x20cell\x20in\x20row:\n\x20\x20\x20\x20#\x20获取学号\n\x20\x20\x20\x20student_id\x20=\x20cell.value\n\x20\x20\x20\x20if\x20student_id:\n\x20\x20\x20\x20\x20\x20#\x20在网页内查找考生信息\n\x20\x20\x20\x20\x20\x20search_input\x20=\x20driver.find_element(By.XPATH,\x20'//input[@placeholder="姓名/考生号"]')\n\x20\x20\x20\x20\x20\x20search_input.clear()\n\x20\x20\x20\x20\x20\x20search_input.send_keys(student_id)\n\x20\x20\x20\x20\x20\x20time.sleep(1)\x20#\x20等待页面加载完成\n\x20\x20\x20\x20\x20\x20search_button\x20=\x20driver.find_element(By.XPATH,\x20'//button[@class="ant-btn\x20ant-btn-primary"]')\n\x20\x20\x20\x20\x20\x20driver.execute_script("arguments[0].click();",\x20search_button)\n\x20\x20\x20\x20\x20\x20time.sleep(1)\x20#\x20等待页面加载完成\n\n\x20\x20\x20\x20\x20\x20#\x20查找所有时间元素\n\x20\x20\x20\x20\x20\x20time_elements\x20=\x20driver.find_elements(By.XPATH,\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'//td[@class="ant-table-column-has-actions\x20ant-table-column-has-sorters"\x20and\x20@style="text-align:\x20center;"]')\n\x20\x20\x20\x20\x20\x20for\x20time_element\x20in\x20time_elements:\n\x20\x20\x20\x20\x20\x20\x20\x20time_value\x20=\x20time_element.text\n\x20\x20\x20\x20\x20\x20\x20\x20if\x20time_value\x20in\x20time_set:\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20获取对应的考场编号元素\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20room_number_element\x20=\x20time_element.find_element(By.XPATH,\x20'../td[@class="ant-table-column-has-actions\x20ant-table-column-has-sorters"\x20and\x20@style="text-align:\x20center;"]')\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20room_number\x20=\x20room_number_element.text\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20room_folder\x20=\x20room_dict[room_number]\n\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20获取对应的照片元素\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20photo_element\x20=\x20driver.find_element(By.XPATH,\x20'//img[@title="报名照片"]')\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20photo_url\x20=\x20photo_element.get_attribute("src")\n\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20下载照片\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20photo_name\x20=\x20student_id\x20+\x20".jpg"\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20photo_path\x20=\x20os.path.join(room_folder,\x20photo_name)\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20response\x20=\x20requests.get(photo_url)\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20with\x20open(photo_path,\x20"wb")\x20as\x20f:\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20f.write(response.content)\n\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20print(f"保存照片:{photo_path}")
原文地址: http://www.cveoy.top/t/topic/pJOg 著作权归作者所有。请勿转载和采集!