前言
本篇内容,让你完全掌握Python是如何自动化办公的~
一、环境准备
1.1 Python 3.7.0
1.2 Pycharm (Python 开发工具)
1.3 Selenium (处理网页表单工具类)
1.4 openpyxl (处理Excel工具类)
selenium 安装:pip install selenium -i https://pypi.douban.com/simple/
openpyxlpy安装:pip install openpyxl -i https://pypi.douban.com/simple/
python3.7.0、pycharm 软件均在我们的百度网盘里:https://pan.baidu.com/s/1Pe0cZzLU1v46EHZZ7EGCnQ
资源失效了请加Python学习交流群进行获取:367203382
我们即将要从Excel中处理的数据长这样:
二、上代码
我们想创建一个.py 文件来实现我们的目标
2.1 先引入我们需要的工具类
from selenium import webdriver from selenium.webdriver.chrome.options import Options from openpyxl import load_workbook import time
2.2 初始化谷歌Driver
# 1、初始化浏览器驱动器 def init_driver(): path = 'E:\\Python_Office_Auto\\Day15\\chromedriver.exe' # 这个要准备chromedriver.exe 放到我们.py 文件同目录。不知道如何获取,加群:367203382,问群主~~~ chrome_options = Options() # 1、 添加user-agent chrome_options.add_argument( 'user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1"') # 2、把配置属性传递给驱动程序、并制定驱动程序的路径 driver = webdriver.Chrome(executable_path=path, options=chrome_options) # 3、隐式等待(给每个网页的元素5秒钟的时间,5秒过后不出现、定位网页元素不存在、并进入异常处理) driver.implicitly_wait(5) return driver
2.3 读取Excel
def read_excel(): wb = load_workbook("用户表.xlsx") ws = wb.active list_users = [] for row in ws.iter_rows(min_row=2, max_row=4, min_col=1, max_col=4, values_only=True): list_users.append(row) return list_users
2.4 填写表单
def input_form(user): driver.get('https://www.wjx.top/jq/81172286.aspx') driver.find_element_by_name('q1').send_keys(user[0]) if user[1] =='男': # 点击男性 driver.find_elements_by_class_name('jqRadio')[0].click() else: # 点击女性 driver.find_elements_by_class_name('jqRadio')[1].click() # 手机号 driver.find_element_by_name('q3').send_keys(user[2]) # 建议 driver.find_element_by_name('q4').send_keys(user[3]) # 提交 driver.find_element_by_id('submit_button').click() time.sleep(3)
2.5 main 函数运行整个代码
if __name__ == '__main__': # 初始化谷歌浏览器驱动器 driver = init_driver() # 读取Excel 文件,把每行数据放到列表里。 list_users = read_excel() # 遍历列表,取出用户信息 for user in list_users: # 执行填写表单操作 input_form(user) # 最后退出浏览器 driver.quit()