缘起
我想被强迫写论文的小伙伴有很多
被强迫用什么问卷调查法的小伙伴也有很多
被问卷折腾的死去活来的小伙伴当然也有很多
求爹爹告奶奶地在各大群请人帮忙填写问卷
一来别人看到这种消息的心情就和看到代购差不多
二来肯定也不会认真填写的啦
不知道你们是不是,
反正每次我填问卷都是看都不看abc
逃~
所以我就想干脆写个小脚本来帮我填问卷好了
于是花了一个多小时搞定了
基本思路
做问卷调查的小伙伴基本上都用过:
问卷星:https://www.wjx.cn/
所以这次我就以这个平台为例子
首先是创建一个测试问卷
image然后随便点点,点击提交
看看都向服务器发送了什么样的包
哇 so easy,居然只是向一个地址发送了:
- 问卷id curlD
- 发送时间 t
- 开始答题时间 starttime
- 不知道什么鬼id rn
- 题目答案 submitdata
那模拟提交问卷的思路也就很清晰了
- 请求页面 就解析出什么鬼id(rn)
- 计算其他参数,如t、starttime
- 找到所有的问题,并随机做答,构造submitdata
- 发送请求
具体代码
最主要的就两个部分
找到什么鬼ID rn
def parse_post_url(resp):
'''
解析出提交问卷的url
'''
# 找到rn
rn = int(resp.html.search('rndnum="{}"')[0].split('.')[0])
# 提交问卷的时间
raw_t = round(time.time(), 3)
t = int(str(raw_t).replace('.', ''))
# 模拟开始答题时间
starttime = datetime.fromtimestamp(
int(raw_t) - randint(1, 60 * 3)).strftime("%Y/%m/%d %H:%M:%S")
url = POST_URL_MAP.format(QUESTION_ID, t, starttime, rn)
return url
找到所有题目
def parse_post_data(resp):
'''
解析出问题和选项
返回post_data
'''
post_data = {'submitdata': ""}
questions = resp.html.find('fieldset', first=True).find('.div_question')
for i, q in enumerate(questions):
title = q.find('.div_title_question_all', first=True).text
choices = [t.text for t in q.find('label')]
random_index = randint(0, len(choices) - 1)
choice = choices[random_index]
post_data['submitdata'] += '{}${}}}'.format(i+1, random_index+1)
print(QUESTION_INFO.format(title, choices, choice))
time.sleep(0.5)
# 去除最后一个不合法的`}`
post_data['submitdata'] = post_data['submitdata'][:-1]
return post_data
来看看效果吧
执行时
image问卷星后台
image全部代码私信小编领取~
网友评论