使用selenium来自动填写问卷
这份问卷是为了完成一份作业制作的,因为回收的效果不理想,所有使用selenium来简单的填写一下。因为此问卷的形式本身就很简单,所以实现自动填写也比较简单。
因为在此问卷中并没有反爬机制,故不需要对反爬处理。
问卷的结构
问题的结构
可以看到问题的结构都是统一的,这样可以直接获取所有的问题,然后使用selenium来控制点击。
程序设计
1,因为为了防止后续的统计中所有选项的比重都相同。所以对问题选项的选择上做一个简单的处理。
#预期结果(问卷填写对这些答案的比重增加)
experesult={'0':0,'1':1,'2':0,'3':1,'6':0,'7':1,'9':1,'10':1,'11':1,'12':1,'13':1,'14':0,'15':0,'16':0,'17':0
,'18':0,'19':0,'20':0,'21':1}
def select(k,i,t):
'''
随机选择答案,并提高给定答案的比重.每3次就一定会选中一次
'''
#如果i在需要特殊处理的字典中
if str(i) in experesult.keys():
if k%3==0:
return experesult[str(i)]
else:
chic=random.randint(0,t)
return chic
2,打开网页
3,获取需要填写的题目
lisbody=browser.find_elements_by_class_name(“question-body”)
4,获取“提交”按键
submit=browser.find_element_by_class_name("btn-submit ")
5,开始循环所有需要填写的题目
5.1,获取一个题目中的所有选项。
listemp=lisbody[i].find_elements_by_class_name(“checkbox-option”)
5.2,获取具体选则哪一项。并点击
ch=select(k, i, len(listemp)-1)
listemp[ch].click()
6,提交,关闭网页。
完整代码
#coding=gbk
#coding:utf-8
'''
Created on 2020年7月29日
@author: dingyiyi
'''
from selenium import webdriver
from time import sleep
import random
#预期结果(问卷填写对这些答案的比重增加)
experesult={'0':0,'1':1,'2':0,'3':1,'6':0,'7':1,'9':1,'10':1,'11':1,'12':1,'13':1,'14':0,'15':0,'16':0,'17':0
,'18':0,'19':0,'20':0,'21':1}
def select(k,i,t):
'''
随机选择答案,并提高给定答案的比重
'''
if str(i) in experesult.keys():
if k%1==0:
#选则给定的选项
return experesult[str(i)]
else:
#随机选则一个
chic=random.randint(0,t)
return chic
#循环10次。(填写10遍)
for k in range(0,10):
#加载谷歌浏览器
browser=webdriver.Chrome()
#加载页面
browser.get('https://wj.qq.com/s2/6803633/26da/')
#获取选项
lisbody=browser.find_elements_by_class_name("question-body")
#获取提交按键
submit=browser.find_element_by_class_name("btn-submit ")
#填写问卷
for i in range(0,22):
#获取选项
listemp=lisbody[i].find_elements_by_class_name("checkbox-option")
#随机选中一个选项
ch=select(k, i, len(listemp)-1)
#点击
listemp[ch].click()
#提交
submit.click()
print("第"+str(k+1)+"次自动填写完成")
#关闭
browser.close()
#等待1秒,进行下一次填写
sleep(1)