wps python 自动化_Python3+Selenium+Chrome实现自动填写WPS表单
引言
本文通过python3、第三方python库Selenium和谷歌浏览器Chrome,完成WPS表单的自动填写。
开发环境配置
python3的安装:略,网上都有教程。
Selenium的安装:在命令行输入pip3 install selenium并回车即可完成安装,如果不成功,查找网上教程。
Chrome的安装:略,网上都有教程。
因为Selenium需要ChromeDriver来驱动Chrome,所以还需要下载驱动ChromeDriver。下面重点介绍一下ChromeDriver的安装(如不太清楚,查找网上教程):
1.确定谷歌浏览器的版本号:首先打开谷歌浏览器,点击右上角竖着的三个点—帮助—关于Google Chrome,可以看到谷歌浏览器的版本号。
2.下载ChromeDriver:从ChromeDriver镜像站里找到谷歌浏览器版本号对应的文件夹并打开,从中找到对应的系统后下载。
3.配置:将压缩包解压后得到可执行文件,将其配置到环境变量Path下,Windows可以直接放到Python的Scripts目录下(因为该目录一般都在环境变量里)。
4.验证:在命令行输入chromeDriver并回车,如果不报错,即完成安装。 也可以采用火狐浏览器(也需要额外下载相应驱动)和PhantomJS浏览器引擎(不需要额外下载相应驱动,但是无可视化界面)。
完成以上步骤即可进行代码编写。
编写代码
这个是测试用的WPS表单。
如上图,我们先分析一下这个表单:
这个表单已经列举出大部分WPS表单问题形式:
1.像问题1和3这种需要输入文字或者数字的都属于INPUT组件。我们用如下代码操作这种组件。其中?要修改为N-1,表示第N个问题,比如问题1的话,input_?应该改为input_0;问题3的话,input_?应该改为input_2。'XXX'应改改为自己的内容,即文字或者数字。
answer = wait.until(EC.element_to_be_clickable((By.ID, 'select_label_wrap_?_!')))
answer.click()
2.像问题2、4和6(其中问题6后面再说)这种不需要输入只需要一次选择的都属于LABEL组件(本来应该是单选和多选组件,但是WPS表单是用Label组件实现的)。我们用如下代码操作这种组件。其中?要修改为N-1,表示第N个问题,用法同上;'!'也要修改为N-1,表示第N个选项,比如问题2要选中第1个选项的话,select_label_wrap_?_!应改为select_label_wrap_1_0;要选中第2个选项的话,select_label_wrap_?_!应改为select_label_wrap_1_1。
answer = wait.until(EC.element_to_be_clickable((By.ID, 'select_label_wrap_?_!')))
answer.click()
对于问题6,虽然其组件也属于LABEL组件,但涉及到填写时间,所以利用time库来获取当前时间,与选项作比较后赋值给t,从而选中第t+1个选项。其中?要修改为N-1,表示第N个问题,用法同上。
localtime = time.localtime(time.time())
if localtime.tm_hour < 7:
t = 0
print("填写时间为:0700-0900")
elif localtime.tm_hour < 11:
t = 1
print("填写时间为:1100-1200")
else:
t = 2
print("填写时间为:1800-2000")
answer = wait.until(EC.element_to_be_clickable((By.ID, 'select_label_wrap_?_' + str(t))))
answer.click()
3.像问题5这种需要多次点击选择的都属于PICKER组件。这种PICKER组件只能针对性的编写代码,好在一般表单只有一个日期PICKER控件。我们用如下代码操作这种组件。这个不需要修改,但是如果有两个日期PICKER控件,还要视情况修改,应该没有这么变态的表单。
answer = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.ant-calendar-picker')))
answer.click()
answer = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.ant-calendar-today-btn')))
answer.click()
因此,图示表单应该用以下代码进行自动填写,运行后会弹出Chrome浏览器窗口,打开对应WPS表单网页,自动填入内容,等待10s秒(方便检查或者反悔,反悔的话关闭网页即可)后,自动确认完成填写,最后命令行输出Perfect!(只有命令行输出Perfect!或者网页显示表单填写成功才表示自动填写成功)。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
# WPS表单的网址
url = 'https://f.wps.cn/form-write/uwDUPB2N/'
# 完成浏览器对象的初始化,设定超时时间为10秒。
browser = webdriver.Chrome()
wait = WebDriverWait(browser, 10)
browser.get(url)
################################
# 针对INPUT组件,XXX替换成自己的内容。
answer = wait.until(EC.element_to_be_clickable((By.ID, 'input_0')))
answer.send_keys('XXX')
# 针对LABEL组件。
answer = wait.until(EC.element_to_be_clickable((By.ID, 'select_label_wrap_1_0')))
answer.click()
# 针对INPUT组件,XXX替换成自己的内容。
answer = wait.until(EC.element_to_be_clickable((By.ID, 'input_2')))
answer.send_keys('18')
# 针对LABEL组件。
answer = wait.until(EC.element_to_be_clickable((By.ID, 'select_label_wrap_3_0')))
answer.click()
# 针对PICKER组件。
answer = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.ant-calendar-picker')))
answer.click()
answer = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.ant-calendar-today-btn')))
answer.click()
# 针对询问时间的INPUT组件。
localtime = time.localtime(time.time())
if localtime.tm_hour < 7:
t = 0
print("填写时间为:0700-0900")
elif localtime.tm_hour < 11:
t = 1
print("填写时间为:1100-1200")
else:
t = 2
print("填写时间为:1800-2000")
answer = wait.until(EC.element_to_be_clickable((By.ID, 'select_label_wrap_5_' + str(t))))
answer.click()
################################
# 等待10秒
time.sleep(10)
# 点击提交
commit = wait.until(EC.element_to_be_clickable((By.ID, 'submit_button')))
commit.click()
# 确认提交
yes = wait.until(EC.element_to_be_clickable((By.ID, 'bind_phone_modal_confirm_button')))
yes.click()
# 反馈成功
print('Perfect!')
类似WPS表单,只需要修改网址url和32个#之间的内容即可。
建议将time.sleep()中的值调大一些,这样还可以留出足够的时间让自己检查一下,也可以把以下代码删掉,这样的话,只会自动填写,不会自动确认。
# 点击提交
commit = wait.until(EC.element_to_be_clickable((By.ID, 'submit_button')))
commit.click()
# 确认提交
yes = wait.until(EC.element_to_be_clickable((By.ID, 'bind_phone_modal_confirm_button')))
yes.click()
这里再给一份针对某表单的代码,仅供参考学习交流,谨记若表单变动,代码也要变动:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
url = '填入WPS表单的网址'
browser = webdriver.Chrome()
wait = WebDriverWait(browser, 10)
browser.get(url)
answer = wait.until(EC.element_to_be_clickable((By.ID, 'input_0')))
answer.send_keys('XXX')
answer = wait.until(EC.element_to_be_clickable((By.ID, 'select_label_wrap_1_1')))
answer.click()
answer = wait.until(EC.element_to_be_clickable((By.ID, 'select_label_wrap_2_0')))
answer.click()
answer = wait.until(EC.element_to_be_clickable((By.ID, 'select_label_wrap_3_0')))
answer.click()
answer = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.ant-calendar-picker')))
answer.click()
answer = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.ant-calendar-today-btn')))
answer.click()
localtime = time.localtime(time.time())
if localtime.tm_hour < 7:
t = 0
print("填写时间为:0700-0900")
elif localtime.tm_hour < 11:
t = 1
print("填写时间为:1100-1200")
else:
t = 2
print("填写时间为:1800-2000")
answer = wait.until(EC.element_to_be_clickable((By.ID, 'select_label_wrap_5_' + str(t))))
answer.click()
answer = wait.until(EC.element_to_be_clickable((By.ID, 'input_6')))
answer.send_keys('36.6')
answer = wait.until(EC.element_to_be_clickable((By.ID, 'select_label_wrap_7_0')))
answer.click()
answer = wait.until(EC.element_to_be_clickable((By.ID, 'select_label_wrap_8_0')))
answer.click()
answer = wait.until(EC.element_to_be_clickable((By.ID, 'select_label_wrap_9_0')))
answer.click()
answer = wait.until(EC.element_to_be_clickable((By.ID, 'select_label_wrap_10_1')))
answer.click()
answer = wait.until(EC.element_to_be_clickable((By.ID, 'select_label_wrap_11_0')))
answer.click()
answer = wait.until(EC.element_to_be_clickable((By.ID, 'select_label_wrap_12_0')))
answer.click()
time.sleep(5)
commit = wait.until(EC.element_to_be_clickable((By.ID, 'submit_button')))
commit.click()
yes = wait.until(EC.element_to_be_clickable((By.ID, 'bind_phone_modal_confirm_button')))
yes.click()
print('Perfect!')
总结
以上所述是小编给大家介绍的Python3+Selenium+Chrome自动填写WPS表单,希望对大家有所帮助!
尾言
最后,祝福武汉早日康复,武汉加油!
wps python 自动化_Python3+Selenium+Chrome实现自动填写WPS表单相关推荐
- Chrome浏览器自动填充的表单如何去掉淡黄色背景???
1.原因:表单自动填充元素在chrome下会有一个默认样式 (如下),并且优先级最高,无法覆盖(!important也无法覆盖). input:-webkit-autofill { backgroun ...
- 网页自动提交Form表单的方法
最近做网站运营用到了邮件营销,使用了搜狐的sendcloud邮件代发平台.要想使用sendcloud平台发送邮件给客户,就必须调用他们的API接口进行批量发送,那么问题来了.sendcloud提供了好 ...
- php文本框自动补全,PHP自动补全表单的两种方法
效果图: 第一种:从数据库中检索之后补全 第二种:邮箱等纯前端的补全 先说第二种,使用开源的插件,所以相对简单. github上面的项目 completer. https://github.com/f ...
- layui 解决浏览器自动填充form表单账号和密码输入框的问题
layui 解决浏览器自动填充form表单账号和密码输入框的问题 参考文章: (1)layui 解决浏览器自动填充form表单账号和密码输入框的问题 (2)https://www.cnblogs.co ...
- python批量自动填写网页表单_使用python+selenium帮助你填写网站表单
应用场景:频繁往网站.电商平台后台等填写数据. 工作场景:电商上传商品.测试人员.批量提交表单等. 涉及内容:python读写EXCEL文件.selenium基础使用.Xpath基础使用.python ...
- wps python 自动化_Python实现合同文档自动化生成
0. 引言 前两天整理了一篇使用Word中的邮件合并功能实现使用Excel数据源填入Word指定位置,从而批量生成相似文档的功能,实际上是在为今天的这篇文章做铺垫.这次我打算实现的功能是通过Pytho ...
- python+selenium自动填写提交电子表单
前两天看到空间里面有人发 问卷星 调查,就想到能不能用 python 和 网页交互 , 自动 填写 电子表单 ,结果还真有,就尝试了一下,有些还没搞清楚,先大概介绍一下,慢慢来吧. 1. 首先,安装 ...
- python webdriver save_Python + Selenium +Chrome 批量下载网页代码修改【新手必学】
Python + Selenium +Chrome 批量下载网页代码修改 主要修改以下代码可以调用 本地的 user-agent.txt 和 cookie.txt 来达到在登陆状态下 批量打开并下载网 ...
- python爬取问卷星内容_Python Selenium 问卷星自动填写
从问卷星网站找的一个模板 编写思路大致是这样xpath定位网页元素 driver.find_element_by_xpath 对元素进行操作,有点击click和填入send_keys 最后点击提交问卷 ...
最新文章
- 模拟jQuery ajax服务器端与客户端通信
- LeetCode-35. Search Insert Position
- 为什么visual的联机浏览功能不能用_饥荒为什么不出联机手游?看到这3条缺陷,才明白原因...
- 使用wireshark抓取wcf生成的soap消息
- 在同一个Linux上配置多个git账户
- java学习(62):java抽象类
- 这段js代码得拯救你多少时间
- Create MSSQL Procedure
- 大数据学习笔记26:MR案例——双重排序(先按月份升序,再按利润降序)
- 数据可视化设计的UI实用模板素材
- 28.Linux/Unix 系统编程手册(上) -- 详述进程创建和程序执行
- Houdini输出ABC到UE4识别材质
- 蜗居(露骨争议电视剧《蜗居》...
- VS 点击页面自动定位到解决方案资源管理器目录位置
- 关于正向级数收敛而它的平方也收敛的证明
- springboot二手车交易系统毕业设计源码131456
- android计算器开源小项目代码(附安装包.apk)
- python 练习洗牌
- 版权概念小结(音乐方面)
- 【ERP】实践3_会计科目_凭证_期初余额
热门文章
- 拾色器,可以取出电脑屏幕的任何颜色,ui以及程序员前端等常用软件,文件很小,300K
- Mac OS升级GCC版本
- jquery ajax success响应拦截
- Matlab与NI VeriStand
- 12、循环结构(While循环,do while循环,for循环)
- WIN10近期网络bug修复方案
- python代码加密--pyinstaller
- 13.1、QT::TestPainter操作
- 盛大游戏旗下2010年度最具战斗力网游
- Lua快速入门篇(XLua教程)(Yanlz+热更新+xLua+配置+热补丁+第三方库+API+二次开发+常见问题+示例参考)