python+selenium自动填写提交电子表单_y=520(2sinM-sin2M)的博客-程序员秘密

技术标签: python  自动填写  selenium  python代码  电子表单  问卷星  

前两天看到空间里面有人发 问卷星 调查,就想到能不能用 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查找 radio_box 类的元素    
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查找 check_box 类的元素    
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. 这个不可行,直接跳到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这种方式,只不过是问卷网这个比较奇怪,所以这个方法是完全可行的。

9*(可行方案)根据评论区一位老兄的指点,解决了下拉框的选择问题(上面的9可以忽略了)。

## 查找下拉框按钮点击
    elem_wrapper=driver.find_elements_by_class_name("w-selection-wrapper")
    elem_wrapper[0].click()
## 找到所有的选择选项,点击第二个元素“应该不会留”
    option_cell=driver.find_elements_by_class_name("w-selection-option")
    option_cell[2].click()

w-selection-wrapper和w-selection-option大家在源码里都可以找到。
解释一下为啥成功了:使用select的时候,下拉框没有点击,所以下拉框的内容是隐藏的,无法被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岁")
link=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 time import sleep
##打开chrome浏览器
driver=webdriver.Chrome()
for i in range(1,10):
    print("开始第"+str(i)+"次填写")
## 打开网页    
    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("w-selection-wrapper")
    elem_wrapper[0].click()
## 找到所有的选择选项,点击第二个元素“应该不会留”
    option_cell=driver.find_elements_by_class_name("w-selection-option")
    option_cell[2].click()

##通过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();
    print("第"+str(i)+"次填写完成")
    sleep(5)

运行结果:
在这里插入图片描述

15. 现在就做到这一步,希望大家多提问题,多多交流!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_18820125/article/details/103487539

智能推荐

read 系统调用剖析_张鸷的博客-程序员秘密

Read 系统调用在用户空间中的处理过程 Linux 系统调用(SCI,system call interface)的实现机制实际上是一个多路汇聚以及分解的过程,该汇聚点就是 0x80 中断这个入口点(X86 系统结构)。也就是说,所有系统调用都从用户空间中汇聚到 0x80 中断点,同时保存具体的系统调用号。当 0x80 中断处理程序运行时,将根据系统调用号对不同的系统调用分别处理(调用不同的内核

计算机相关会议排名(一)_weixin_30885111的博客-程序员秘密

计算机相关会议排名(一)计算机相关会议排名(二) Acronym Standard Name Rank AAAI National Conference of the American Association for Artificial Intelligence A+ AAMAS International Conference on ...

JAVA基础之容器--Map_花开烬处的博客-程序员秘密

Map的特点是存放一对"key"-“value”(键值对)。我们可以通过"key"对象来查找对应的值,因此自然地,为了保证查找结果的唯一性,"key"对象是不可重复的。Map接口的实现类有HashMap、HashTable、TreeMap、Properties等。HashMap是Map最常用的实现类。HashMap底层是一个“位桶数组”,即数组+单向链表的形式,或者说单向链表构成的数组。...

windows 系统vscode 配置c++调试器gdb_春蕾夏荷_728297725的博客-程序员秘密

切记:(1)工程项目不可以是中文地址(2)gdb的目录到\\bin设置到系统的环境变量中(1)launch.json{// 使用 IntelliSense 了解相关属性。// 悬停以查看现有属性的描述。"version": "0.2.0","configurations": [{// 配置 VS Code 调试行为:"name": "GDB Debug",...

数组去重常用方法_摇头的金丝猴的博客-程序员秘密

数组去重let arr = [1,2,3,4,5,6,7,8,9,3,1,3,5,6,7,2];const newArr= [...new Set(arr)];//详解 // 1 先把数组 转化 为Set对象 const set= new Set(arr); const newArr = [...set] // 在此 ...是将set里面的数组单元释放出来2 利用indexof 查询...

NVL2_msg_java2011的博客-程序员秘密

NVL2(expr1,expr2,expr3)   功能:如果参数表达式expr1值为NULL,则NVL2()函数返回参数表达式expr3的值;如果参数表达式expr1值不为NULL,则NVL2()函数返回参数表达式expr2的值。

随便推点

各种优秀的第三方库_第三方库什么样_慕七儿的博客-程序员秘密

这里写链接内容原文地址:http://www.tuicool.com/articles/jyA3MrUAndroid开源库自己一直很喜欢Android开发,就如博客签名一样, 我是程序猿,我为自己代言 。在摸索过程中,GitHub上搜集了很多很棒的Android第三方库,推荐给在苦苦寻找的开发者,而且我会 不定期的更新 这篇文章。Android下的优秀开发库数不胜数,在本文中,我列举的多是开发流程中

如何把一个项目打包成jar包并运行_项目打jar包_张文博5005的博客-程序员秘密

1.基于jdk环境,使用Eclipse2.首先建立一个简单的案例,去maven官网下载fastjson.jar并导入(本案例中使用JSONArray()方法)3.右键整个项目,选择Build Path -->Add External Archives4.5.接下来进行jar包导出①右键整个项目,选择Export文件类型选择JARfile②点击Next③点击Next④点击Browse选择本项目的程序入口所在的类,在本案例中为Test...

signature=183a4005cb9a7ad9b99869e39ac1292b,Electromagnetic signatures of thin accretion disks in wor..._扬云飞的博客-程序员秘密

摘要:In this paper, we study the physical properties and characteristics of matter forming thin accretion disks in static and spherically symmetric wormhole spacetimes. In particular, the time averaged ...

LVS 负载均衡之NAT模式 原理与实践_lvs nat模式原理_富士康质检员张全蛋的博客-程序员秘密

LVS负载均衡工作原理实现LVS负载均衡转发方式有三种,分别为NAT、DR、TUN模式,LVS均衡算法包括:RR(round-robin)、LC(least_connection)、W(weight)RR、WLC模式等(RR为轮询模式,LC为最少连接模式)。LVS负载均衡NAT转发方式原理:用户请求LVS VIP到达director(LVS服务器:LB),director(LVS服务器)将请求的报文(因为用户的请求有一个请求报文,也就是请求包里面,请求包里面有一个目标IP地址)的目标IP地.

unique_ptr比auto_ptr安全的原因(个人理解)_unique_ptr 线程安全_qq592567042的博客-程序员秘密

例:以后ptr1将成为悬挂指针,再次调用会引发未知的问题而用unique_ptr以后ptr1也会变为悬挂指针。为什么说unique_ptr安全呢?因为平时调用=赋值时,等号右侧是不会被清除的。但是auto_ptr却会这样。因此unique_ptr用move函数。这样能起到强调作用,就会稍微安全一点。但是move以后也会变为悬挂指针,这点需要注意。...

java中EventQueue的作用_Swing之EventQueue简介_来一份抹茶煎饼丶的博客-程序员秘密

在Swing的GUI程序中,EventQueue是一个重要的部分,它负责所有AWTEvent(以及其子类)的分发EventQueue简单工作原理1)简单来讲,在EventQueue中有一个dispatchThread,这是一个线程类,负责事件的分发,当Queue中有事件的时候,它会摘取前面的事件并分发给相应的对象进行处理,等处理完之后再获取下一个,当Queue中没有事件的时候,线程等待。2)当有事...

推荐文章

热门文章

相关标签