因为工作原因,需要将xls文件的数据录入到网上。因为数据量太多,而且以后时不时还需要用上,Ctrl+C,Ctrl+V不是长久之计。所有写了一个小工具,用于把xls文件的数据录入到网站上。

读写xls部分省略。

要实现填写表单,需要:

1.python的selenium库。

2.Chrome浏览器

3.与谷歌浏览器版本对应的chromedriver,下载地址:http://npm.taobao.org/mirrors/chromedriver/

一、配置chromedriver

2)下载后解压,并把chromedriver.exe拷贝到Chrome浏览器所在目录,如图所示:

3)为了方便,我们也可以把Chrome路径添加到系统环境变量中:

到此,chromedriver就配置完毕啦。

二、Python安装selenium库

使用如下命令即可完成安装:

pip3 install selenium

如图:

三、测试selenium库使用

编辑如下代码,实现打开百度页面并搜索“cnblogs”的简单功能(后续讲解代码中id的来源):

importosfrom selenium importwebdriverdeftest():

driver= webdriver.Chrome("chromedriver.exe") #chromedriver所在路径

driver.get(r"http://www.baidu.com")

driver.find_element_by_id("kw").send_keys("cnblogs") #输入cnblogs

driver.find_element_by_id("su").click() #点击“百度一下”搜索

if __name__ == "__main__":

test()

os.system("pause")

测试完成,接下来就可以使用了。

四、selenium的使用

selenium提供了多种定位网页元素的方法,如通过id、name、classname、xpath等多种方式。详细请参考:http://www.testclass.net/selenium_python/find-element/,这里就不一一赘述了。

到此,我们就已经几乎做好填写表单的所有准备啦,最后一步,就是定位我们的目标网站的具体元素并实现填表了。

五、定位网页元素

chrome开发者工具为我们提供了非常遍历的方式定位网页元素。我们以定位百度首页的文本输入框以及“百度一下”按钮为例:

1、打开Chrome浏览器,按F12打开开发者工具。点击进入“Elements”板块,我们就能看到网页完整的HTML代码。如图:

2.点击开发者工具左上角的小按钮来定位页面元素,我们定位文本输入框找到输入框对应的元素id,当然,我们也可以通过其他值来定位,如图:

接下来我们定位百度按钮:

从这里我们看到,文本输入框的id是“kw”,百度一下按钮的id是su,有了如上信息,我们就可以写出第三大点的代码了。

六、实践中遇到的一些问题:处理批量填单时抛出异常:selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted

对于批量数据的填写,常常需要我们点击按钮增加填写区域。如下图示例

通过开发者工具,我们定位到该按钮元素,三个按钮属于同一个类,class=“addbutton”:

假设我们已经定位到改行元素row_element,接下来我们就开始实现代码吧:

1)第一版

我们通过row_element定位到第二个addbutton按钮并点击,代码如下:

通过以上方式,我们实现了自动添加一行填表区域的逻辑。

但是事与愿违,当我用这种方式批量填表时,填表途中抛出了异常:

selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element is not clickable at point (737, 833). Other element would receive the click:

(Session info: chrome=77.0.3865.90)

大概意思就是被其他元素拦截了。只能再找新的办法。

各种查资料,结果就出现了第二版代码。

2)第二版

将第一版代码稍作修改,使用JavaScript脚本执行,如图:

print("添加一条填表区...")

add_buttons= row_element.find_elements_by_class_name('addbutton')#add_buttons[1].click()

driver.execute_script("arguments[0].click()", add_buttons[1])

View Code

经过修改,再也没有出现刚刚的报错了~

3)第三版,继续改进

随着自己对JavaScript和HTLM的进一步熟悉,重新看了一下发现自己绕了个大弯,其实完全有更简单的方法实现。

笔者原本的逻辑,是通过各种方式定位到了该行元素,再定位到具体按钮,进而使用click()实现。

但是我们回头看一下HTLM源码,如下:

我们可以看到,其实click时间就是响应了一个postInsert()函数!

我们直接使用driver.execute_script()调用postInsert()函数就可以了,完全不需要定位元素位置呀,不!需要!定位!呀!呀!

postInsert()函数接受一个整型值,代表在第几行的后面插入新行。对代码稍作修改,就有了第三版代码,一行就搞定了:

至此,工具就写完了,笔者这几天是从0基础了解HTML、JavaScript开始,一步一步加深认识,并把工具写好,碰到的坑,数不尽数。但是收获也很大,继续加油吧!

python 打开网页 并填表单_Windows下使用python3 + selenium.webdriver功能实现自动填写网页表单功能...相关推荐

  1. 怎样控制键盘按键自动填写网页表单

    浏览器中使用模拟键盘按键填写网页表单,不但可以完成数据输入,输入时还能真实地触发键盘元素绑定的键盘事件. 打开木头浏览器的工具菜单,进入项目管理容器,创建"填写内容"步骤,并打开百 ...

  2. 火狐浏览器Firefox 如何使用iMacros 自动填写网页表单

    1 我们首先访问一个想要自动填写表单的网站.我们以百度为例,右侧有登录窗口. 2 然后我们点开刚安装上的iMacros插件,一般安装之后就会自动出现在浏览器的某个地方,点击记录选项卡,再点击记录. 3 ...

  3. python网页自动填写_Windows下使用python3 + selenium实现网页自动填表功能

    因为工作原因,需要将xls文件的数据录入到网上.因为数据量太多,而且以后时不时还需要用上,Ctrl+C,Ctrl+V不是长久之计.所以萌生一个想法,写一个工具,用于把xls文件的数据录入到网站上. 笔 ...

  4. python自动填表格_Windows下使用python3 + selenium实现网页自动填表功能

    因为工作原因,需要将xls文件的数据录入到网上.因为数据量太多,而且以后时不时还需要用上,Ctrl+C,Ctrl+V不是长久之计.所以萌生一个想法,写一个工具,用于把xls文件的数据录入到网站上. 笔 ...

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

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

  6. Java开发必须要会!java自动填写网页表单

    话不多说,先上张图 一.微服务必备技能: 二.一起从浅入深理解DUBBO! **先来看一份DUBBO脑图:**HelloWorld+前置知识+适合群体+架构(核心点:生产者 消费者问题 特点:连通性, ...

  7. python安装之后怎么打开-安装python后如何通过Python打开网页

    Python中可以通过selenium webdriver和webbrowser方法打开网页. 一.selenium webdriver 1.首先需要安装selenium和webdriver pip ...

  8. 安装完python怎么打开-安装python后如何通过Python打开网页

    Python中可以通过selenium webdriver和webbrowser方法打开网页. 一.selenium webdriver 1.首先需要安装selenium和webdriver pip ...

  9. python 打开网页、封装自己的浏览器、制作浏览器、打开麦克风和摄像头、忽略ssl证书错误、置顶、无边框

    python 打开网页.封装自己的浏览器 selenium 下载浏览器和浏览器驱动 功能全面,就是不能无边框 pip install selenium from selenium import web ...

最新文章

  1. java和C++ C比较
  2. mysql 单列转换为行,mysql行转换为列
  3. hdu1518深搜DFS
  4. [转载]windows7中没用boot.ini文件而是改用BCDEDIT来配置了
  5. mysql jdbc 批量_MYSQL 之 JDBC(十四):批量处理JDBC语句提高处理效率
  6. 下拉推广系统立择火星推荐_下拉词优化不仅仅优化百度,其实还可以优化抖音、京东和阿里巴巴...
  7. php mysql 随机排序函数_php+mysql实现数据库随机重排实例
  8. Recursive sequence HDU - 5950
  9. 东方通 no suitable default request_【官】海宁鸿翔东方郡璀璨来袭,不容错过!【营销官网】...
  10. Javascript中 != 和 !==的区别
  11. 【iOS】使用 otool 命令查看 App 所使用的动态库
  12. C语言找n以上最小质数,[原创]求质数(C语言描述)
  13. 测绘 绘图 计算机,20 机械测绘与计算机绘图 草图绘制范例 课件:草图绘制范例.pptx...
  14. ardruino控制继电器_Arduino基础入门篇24—继电器控制
  15. 最优秀的六种造字方法
  16. Eclipse 照亮Java众生
  17. 三菱触摸屏与三菱L系类PLC以太网通讯
  18. Android 利用MediaPlayer实现音乐播放
  19. 直流电动机输出功率与转速的关系问题
  20. ubuntu虚拟机双网卡无法上网问题

热门文章

  1. 狄德罗效应下,小程序被“逼”向中心化
  2. java框架缓存,缓存框架(Java缓存)与框架缓存(介绍mybatis缓存)
  3. 如何更改微信标签名字_微信透明昵称代码复制
  4. 河北省电子工程高级职称公示_2019年河北省电子工程职称评审,中级职称已经出结果了!...
  5. python用pip安装_使用pip安装python库的几种常用方法
  6. Python解析json字符串,json字符串用法
  7. Python命名空间的本质
  8. Python 内存分配时的小秘密
  9. java线程切换 notify_浅谈 Java线程状态转换及控制
  10. mysql数据太大,如何导入_MySQL导入文件过大怎么办