技术标签: python 自动填写 selenium python代码 电子表单 问卷星
pip install selenium
很快就安装完成了。
选择自己的浏览器版本下载就行了(版本号差不多就可以了),查看自己浏览器的方法为: 设置–>帮助–>关于Google Chrome ,如下就是我的版本号:
(注意,如果想下载比如Microsoft Edge的相关驱动,可以在命令交互界面输入:
import selenium
browser=selenium.webdriver.Edge()
报错的最后一行,会提醒下载网址,copy就可以了,如下所示:
)
## 导入模块
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)
看到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()
## 通过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()
第四个问题本来是要用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这种方式,只不过是问卷网这个比较奇怪,所以这个方法是完全可行的。
## 查找下拉框按钮点击
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读取到,而这里首先打开了下拉框,所以就没问题了。
## 通过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();
这里展示的是提交之前的页面。
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)
运行结果:
Read 系统调用在用户空间中的处理过程 Linux 系统调用(SCI,system call interface)的实现机制实际上是一个多路汇聚以及分解的过程,该汇聚点就是 0x80 中断这个入口点(X86 系统结构)。也就是说,所有系统调用都从用户空间中汇聚到 0x80 中断点,同时保存具体的系统调用号。当 0x80 中断处理程序运行时,将根据系统调用号对不同的系统调用分别处理(调用不同的内核
计算机相关会议排名(一)计算机相关会议排名(二) Acronym Standard Name Rank AAAI National Conference of the American Association for Artificial Intelligence A+ AAMAS International Conference on ...
Map的特点是存放一对"key"-“value”(键值对)。我们可以通过"key"对象来查找对应的值,因此自然地,为了保证查找结果的唯一性,"key"对象是不可重复的。Map接口的实现类有HashMap、HashTable、TreeMap、Properties等。HashMap是Map最常用的实现类。HashMap底层是一个“位桶数组”,即数组+单向链表的形式,或者说单向链表构成的数组。...
切记:(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(expr1,expr2,expr3) 功能:如果参数表达式expr1值为NULL,则NVL2()函数返回参数表达式expr3的值;如果参数表达式expr1值不为NULL,则NVL2()函数返回参数表达式expr2的值。
这里写链接内容原文地址:http://www.tuicool.com/articles/jyA3MrUAndroid开源库自己一直很喜欢Android开发,就如博客签名一样, 我是程序猿,我为自己代言 。在摸索过程中,GitHub上搜集了很多很棒的Android第三方库,推荐给在苦苦寻找的开发者,而且我会 不定期的更新 这篇文章。Android下的优秀开发库数不胜数,在本文中,我列举的多是开发流程中
1.基于jdk环境,使用Eclipse2.首先建立一个简单的案例,去maven官网下载fastjson.jar并导入(本案例中使用JSONArray()方法)3.右键整个项目,选择Build Path -->Add External Archives4.5.接下来进行jar包导出①右键整个项目,选择Export文件类型选择JARfile②点击Next③点击Next④点击Browse选择本项目的程序入口所在的类,在本案例中为Test...
摘要: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负载均衡工作原理实现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地.
例:以后ptr1将成为悬挂指针,再次调用会引发未知的问题而用unique_ptr以后ptr1也会变为悬挂指针。为什么说unique_ptr安全呢?因为平时调用=赋值时,等号右侧是不会被清除的。但是auto_ptr却会这样。因此unique_ptr用move函数。这样能起到强调作用,就会稍微安全一点。但是move以后也会变为悬挂指针,这点需要注意。...
在Swing的GUI程序中,EventQueue是一个重要的部分,它负责所有AWTEvent(以及其子类)的分发EventQueue简单工作原理1)简单来讲,在EventQueue中有一个dispatchThread,这是一个线程类,负责事件的分发,当Queue中有事件的时候,它会摘取前面的事件并分发给相应的对象进行处理,等处理完之后再获取下一个,当Queue中没有事件的时候,线程等待。2)当有事...