欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-28 09:53:53
...

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

前两天看到空间里面有人发 问卷星 调查,就想到能不能用 python网页交互自动 填写 电子表单 ,结果还真有,就尝试了一下,有些还没搞清楚,先大概介绍一下,慢慢来吧。
1. 首先,安装 selenium ,这个很简单,进入控制台(win+R,输入cmd,回车),输入
pip install selenium

很快就安装完成了。

2. 然后下载相应的 驱动 ,比如我这里使用 chrome浏览器 ,那么我下载chromedriver,下载地址:chromedriver

选择自己的浏览器版本下载就行了(版本号差不多就可以了),查看自己浏览器的方法为: 设置–>帮助–>关于Google Chrome ,如下就是我的版本号:
python+selenium自动填写提交电子表单
(注意,如果想下载比如Microsoft Edge的相关驱动,可以在命令交互界面输入:

import selenium
browser=selenium.webdriver.Edge()

报错的最后一行,会提醒下载网址,copy就可以了,如下所示:
python+selenium自动填写提交电子表单

3. 将驱动解压后,放置在python文件夹内。此处的python文件夹指的是你的python.exe所在的文件夹,如下就是我的放置位置:

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

4. 准备工作完成,下面就可以使用了,首先我自己使用问卷网创建了一个问卷,问题都是瞎扯的,如下所示:

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

5. 用Google或者IE查看网页源代码(右击–>查看(网页)源(代码)),IE好像更方便一些,可以直接检查元素(在元素上 右击–>检查元素 ),效果如下:

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

6. 操作之前,进行准备工作,输入以下代码:

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from time import sleep
##打开chrome浏览器
driver=webdriver.Chrome()
##打开网页    
driver.get("https://www.wenjuan.com/s/uQzQBv7/")
sleep(1)

7. 开始操作,回答第一个和第二个问题,是单选框 “radio” ,首先右击需要选中的选项,点击检查元素,找到源代码,如下:python+selenium自动填写提交电子表单

看到class的内容为 “radio_box” ,输入以下内容:

##通过class_name查找元素    
elem_radio=driver.find_elements_by_class_name("radio_box");
##点击第一个选项,第四个选项    
elem_radio[0].click()
elem_radio[3].click()

8. 回答第三个问题,是复选框 “check_box” ,同理查看class_name,输入如下代码:

##通过class_name查找元素    
elem_check=driver.find_elements_by_class_name("check_box");
##选中第1、2、4选项
elem_check[0].click()
elem_check[1].click()
elem_check[3].click()

9. 第四个问题本来是要用Select来做的,但是似乎这个问卷网的不太行,他的 “value” 采用了 “data-value” 代替了,而且 indexvisible_text 都不可用,因此就没有继续做,以后看一下Select的源码再试试吧。

(理论上可用的代码如下:

##通过class_name查找元素
elem_wrapper=driver.find_elements_by_class_name("matrix_sel")
##首先用Select把下拉框转化为Select对象,再通过index选择选项,此处选择的是第一个选项
select=Select(elem_wrapper[0]).select_by_index(1)


注意 :一般的网页都可以用Select这种方式,只不过是问卷网这个比较奇怪,所以这个方法是完全可行的。

10. 第五个问题是内容输入,同理右击看元素,使用它的 id ,输入以下代码:

##通过id查找元素,比class更准确,id也在源码中
textarea=driver.find_element_by_id("5def9d9d92beb5764c5b2ef4")
##send_keys可以发送内容和操作
textarea.send_keys("少下雨,多下雪,晴天出点儿云彩")

11. 第六个问题是打分,同理右击查看元素,使用它的 class_name ,输入以下代码:

##通过calss_name查找元素
score=driver.find_elements_by_class_name("div_float");
##打两颗星    
score[1].click()

12. 第七个是填空,和第五个有点儿相似,右击查看元素,使用 id ,输入以下代码:

##通过id查找元素,输入名字、年龄、号码    
name=driver.find_element_by_id("option_5def9dd23631f2371655e788")
name.send_keys("小明")
age=driver.find_element_by_id("option_5def9dd23631f2371655e789")
age.send_keys("25岁")
ink=driver.find_element_by_id("option_5def9dd23631f2371655e78a")
link.send_keys("1008611")

13. 最后提交表单,同理右击元素,检查元素,输入以下代码:

##通过id查找元素    
submit=driver.find_element_by_id("next_button")
##点击此元素,提交表单
submit.click();

14. 效果如下所示:

python+selenium自动填写提交电子表单
python+selenium自动填写提交电子表单
因为我有一项没填,所以没办法提交,如果手工填写之后,就可以提交了。

14. 代码总结如下:

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from time import sleep
##打开chrome浏览器
driver=webdriver.Chrome()
for i in range(10):
##打开网页    
    driver.get("https://www.wenjuan.com/s/uQzQBv7/")
    sleep(1)
##通过class_name查找元素    
    elem_radio=driver.find_elements_by_class_name("radio_box");
##点击第一个选项,第四个选项    
    elem_radio[0].click()
    elem_radio[3].click()
##通过class_name查找元素    
    elem_check=driver.find_elements_by_class_name("check_box");
##选中第1、2、4选项
    elem_check[0].click()
    elem_check[1].click()
    elem_check[3].click()
##    elem_wrapper=driver.find_elements_by_class_name("matrix_sel")
##    select=Select(elem_wrapper[0]).select_by_index(1)
##通过id查找元素,比class更准确,id也在源码中
    textarea=driver.find_element_by_id("5def9d9d92beb5764c5b2ef4")
##send_keys可以发送内容和操作
    textarea.send_keys("少下雨,多下雪,晴天出点儿云彩")
##通过calss_name查找元素
    score=driver.find_elements_by_class_name("div_float");
##打两颗星    
    score[1].click()
##通过id查找元素,输入名字、年龄、号码    
    name=driver.find_element_by_id("option_5def9dd23631f2371655e788")
    name.send_keys("小明")
    age=driver.find_element_by_id("option_5def9dd23631f2371655e789")
    age.send_keys("25岁")
    link=driver.find_element_by_id("option_5def9dd23631f2371655e78a")
    link.send_keys("1008611")
##通过id查找元素    
    submit=driver.find_element_by_id("next_button")
##点击此元素,提交表单
    submit.click();
    sleep(2)

15. 现在就做到这一步,希望能有人来解决我下拉框的问题,多多交流!

相关标签: python代码