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 ,如下就是我的版本号:
(注意,如果想下载比如Microsoft Edge的相关驱动,可以在命令交互界面输入:
import selenium
browser=selenium.webdriver.Edge()
报错的最后一行,会提醒下载网址,copy就可以了,如下所示:
)
3. 将驱动解压后,放置在python文件夹内。此处的python文件夹指的是你的python.exe所在的文件夹,如下就是我的放置位置:
4. 准备工作完成,下面就可以使用了,首先我自己使用问卷网创建了一个问卷,问题都是瞎扯的,如下所示:
5. 用Google或者IE查看网页源代码(右击–>查看(网页)源(代码)),IE好像更方便一些,可以直接检查元素(在元素上 右击–>检查元素 ),效果如下:
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” ,首先右击需要选中的选项,点击检查元素,找到源代码,如下:
看到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” 代替了,而且 index 和 visible_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. 效果如下所示:
因为我有一项没填,所以没办法提交,如果手工填写之后,就可以提交了。
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)