python实现问卷网的自动填写详解
注:为保证问卷结果的真实性和质量,如果不是特殊需要,建议不要使用特殊方法刷数据
环境
- 语言 :python;
- 浏览器:Google Chrome
- 问卷来源:问卷网
前期准备
1.首先针对谷歌浏览器
在windows下配置chromedriver
具体原因可以参考文章后的链接,这里只是说一下简单的步骤
1.打开谷歌浏览器查看版本
2.下载对应版本的chromedriver
下载地址
3.解压
这里有两种方法
方法一是解压到python的scripts文件夹下(比较建议,因为我就是用的这种方法)
方法二是解压到任意位置
4.测试
完成以上三个步骤后
#解压方法用法一的测试程序
from selenium import webdriver #没有selenium库的 需要装一个
driver=webdriver.Chrome()
#法二测试程序
from selenium import webdriver #没有selenium库的 需要装一个
driver=webdriver.Chrome(executable_path=r"你的driver路径")
成功后
运行会打开谷歌浏览器并出现
python代码部分
from selenium import webdriver
import random #用于产生随机数
import time #用于延时
#准备工作
option = webdriver.ChromeOptions()
option.add_argument('headless')
url = 'https://www.wenjuan.com/s/UZBZJvpi6w/' #此处为你要填写的问卷网 问卷的地址
num = 200 # 设置提交问卷次数
#主要程序
for times in range(num):
#打开网页
driver = webdriver.Chrome() #此处使用chromedriver解压在python的scripts文件夹下的方法
driver.get(url)#获取问卷信息
questions = driver.find_elements_by_css_selector('.matrix')
#便利每个问题 index为(从0开始) 题目序号 第一题index=0
for index,answers in enumerate(questions):
# 所有问卷问题选项
answer = answers.find_elements_by_css_selector('.icheckbox_div')
# 填空选项,并填入相关内容
if not answer:
blank_potion = answers.find_element_by_css_selector('.blank.option')
blank_potion.send_keys('无') #此处 “无” 为填写信息
continue
#根据问卷的题目规定和预期结果 例如:1,2,4,5,6,7,8 为单选
# 单选题处理
if index == 0 or index == 7 :
choose_ans = answer[random.randint(0, 2)] #在前三个选项中随机选择一个
choose_ans.click() #相当于点击事件
time.sleep(random.randint(0, 1)) #随机一个延时 以免操作过快 影响问卷的质量
elif index==3:
choose_ans = answer[random.randint(0, 3)]
choose_ans.click()
time.sleep(random.randint(0, 1))
elif index == 5 or index == 6 :
choose_ans = answer[random.randint(0, 2)]
choose_ans.click()
time.sleep(random.randint(0, 1))
elif index == 1 :
choose_ans = answer[random.randint(0, 3)]
choose_ans.click()
time.sleep(random.randint(0, 1))
elif index == 4 :
choose_ans = answer[random.randint(0, 2)]
choose_ans.click()
time.sleep(random.randint(0, 1))
# 多选题处理
#四选二模式 该思想可用于互斥项
elif index ==2:
choose_ans = answer[random.randint(0, 1)]#前两个里面选一个
choose_ans.click()
time.sleep(random.randint(0, 1))
choose_ans = answer[random.randint(2, 3)]#后两个里选一个 可随机应变
choose_ans.click()
time.sleep(random.randint(0, 1))
#随机多选 存在缺陷
elif index ==9:
for i in range(1, random.randint(3, 4)): #随机选则两个或三个 或一个!
choose_ans = answer[random.randint(0, 3)]
choose_ans.click()
time.sleep(random.randint(0, 1))
#分析 当随机选择三个时,有可能三个选项随机数中有两个相同
#这时相当于点击两次 没有做选则 所以结果只剩一个
#同理 当随机选则两个时,可能存在不做选择的情况 若为必填题 则不能提交
#改进 仍有不足 不会出现偶数个选择项
elif index == 8:
for i in range(1,8):
choose_ans = answer[random.randint(0, 6)]
choose_ans.click()
time.sleep(random.randint(0, 1))
#同上理 此时选项个数为 1或3或5或7
subumit_button = driver.find_element_by_css_selector('#next_button') #获取提交按钮
#每个问卷网的提交按钮的获取不同 该方法为 问卷网 问卷提交按钮获取方法
subumit_button.click() #点击提交事件
print('已经为您提交了{}次问卷'.format(int(times) + int(1)))
time.sleep(4) # 延迟问卷结果提交时间,以免间隔时间太短而无法提交
driver.quit()# 退出 关闭网页
总结
本文讲解用python进行对问卷网问卷的自动填写的具体操作步骤
PS:
问卷星有智能识别比较麻烦
chromedriver的配置有问题的话,这里提供一个参考链接
链接