引言

本文通过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表单相关推荐

  1. Chrome浏览器自动填充的表单如何去掉淡黄色背景???

    1.原因:表单自动填充元素在chrome下会有一个默认样式 (如下),并且优先级最高,无法覆盖(!important也无法覆盖). input:-webkit-autofill { backgroun ...

  2. 网页自动提交Form表单的方法

    最近做网站运营用到了邮件营销,使用了搜狐的sendcloud邮件代发平台.要想使用sendcloud平台发送邮件给客户,就必须调用他们的API接口进行批量发送,那么问题来了.sendcloud提供了好 ...

  3. php文本框自动补全,PHP自动补全表单的两种方法

    效果图: 第一种:从数据库中检索之后补全 第二种:邮箱等纯前端的补全 先说第二种,使用开源的插件,所以相对简单. github上面的项目 completer. https://github.com/f ...

  4. layui 解决浏览器自动填充form表单账号和密码输入框的问题

    layui 解决浏览器自动填充form表单账号和密码输入框的问题 参考文章: (1)layui 解决浏览器自动填充form表单账号和密码输入框的问题 (2)https://www.cnblogs.co ...

  5. python批量自动填写网页表单_使用python+selenium帮助你填写网站表单

    应用场景:频繁往网站.电商平台后台等填写数据. 工作场景:电商上传商品.测试人员.批量提交表单等. 涉及内容:python读写EXCEL文件.selenium基础使用.Xpath基础使用.python ...

  6. wps python 自动化_Python实现合同文档自动化生成

    0. 引言 前两天整理了一篇使用Word中的邮件合并功能实现使用Excel数据源填入Word指定位置,从而批量生成相似文档的功能,实际上是在为今天的这篇文章做铺垫.这次我打算实现的功能是通过Pytho ...

  7. python+selenium自动填写提交电子表单

    前两天看到空间里面有人发 问卷星 调查,就想到能不能用 python 和 网页交互 , 自动 填写 电子表单 ,结果还真有,就尝试了一下,有些还没搞清楚,先大概介绍一下,慢慢来吧. 1. 首先,安装 ...

  8. python webdriver save_Python + Selenium +Chrome 批量下载网页代码修改【新手必学】

    Python + Selenium +Chrome 批量下载网页代码修改 主要修改以下代码可以调用 本地的 user-agent.txt 和 cookie.txt 来达到在登陆状态下 批量打开并下载网 ...

  9. python爬取问卷星内容_Python Selenium 问卷星自动填写

    从问卷星网站找的一个模板 编写思路大致是这样xpath定位网页元素 driver.find_element_by_xpath 对元素进行操作,有点击click和填入send_keys 最后点击提交问卷 ...

最新文章

  1. 模拟jQuery ajax服务器端与客户端通信
  2. LeetCode-35. Search Insert Position
  3. 为什么visual的联机浏览功能不能用_饥荒为什么不出联机手游?看到这3条缺陷,才明白原因...
  4. 使用wireshark抓取wcf生成的soap消息
  5. 在同一个Linux上配置多个git账户
  6. java学习(62):java抽象类
  7. 这段js代码得拯救你多少时间
  8. Create MSSQL Procedure
  9. 大数据学习笔记26:MR案例——双重排序(先按月份升序,再按利润降序)
  10. 数据可视化设计的UI实用模板素材
  11. 28.Linux/Unix 系统编程手册(上) -- 详述进程创建和程序执行
  12. Houdini输出ABC到UE4识别材质
  13. 蜗居(露骨争议电视剧《蜗居》...
  14. VS 点击页面自动定位到解决方案资源管理器目录位置
  15. 关于正向级数收敛而它的平方也收敛的证明
  16. springboot二手车交易系统毕业设计源码131456
  17. android计算器开源小项目代码(附安装包.apk)
  18. python 练习洗牌
  19. 版权概念小结(音乐方面)
  20. 【ERP】实践3_会计科目_凭证_期初余额

热门文章

  1. 拾色器,可以取出电脑屏幕的任何颜色,ui以及程序员前端等常用软件,文件很小,300K
  2. Mac OS升级GCC版本
  3. jquery ajax success响应拦截
  4. Matlab与NI VeriStand
  5. 12、循环结构(While循环,do while循环,for循环)
  6. WIN10近期网络bug修复方案
  7. python代码加密--pyinstaller
  8. 13.1、QT::TestPainter操作
  9. 盛大游戏旗下2010年度最具战斗力网游
  10. Lua快速入门篇(XLua教程)(Yanlz+热更新+xLua+配置+热补丁+第三方库+API+二次开发+常见问题+示例参考)