设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4692|回复: 0

用Python自动填写问卷星

[复制链接]

5

主题

63

金钱

111

积分

入门用户

发表于 2018-6-4 14:40:53 | 显示全部楼层 |阅读模式
  1. QUESTION_ID  =  11231

  2. QUESTION_URL  =  “ https://www.wjx.cn/jq/ {} .aspx ” .format(QUESTION_ID)

  3. #提交问卷选项的网址
  4. POST_URL_MAP  =  “ https://www.wjx.cn/joinnew/processjq.ashx?submittype=1&curID= {}&t = {}&starttime = {}&rn = {} ”

  5. QUESTION_INFO  =  '''
  6. 题目:{}
  7. 选项:{}
  8. 随机选择结果:{}
  9. ~~~~~~~~~~~~~~~~~~~~~~
  10. “””

  11. #回答次数
  12. ANSWER_TIMES  =  3
复制代码

  1. import time
  2. from datetime import datetime
  3. from random import randint

  4. from requests_html import HTMLSession

  5. from configs import (QUESTION_ID, QUESTION_URL, POST_URL_MAP,
  6.                      QUESTION_INFO, ANSWER_TIMES)


  7. def parse_post_url(resp):
  8.     '''
  9.     解析出提交问卷的url
  10.     '''
  11.     # 找到rn
  12.     rn = int(resp.html.search('rndnum="{}"')[0].split('.')[0])
  13.     # 提交问卷的时间
  14.     raw_t = round(time.time(), 3)
  15.     t = int(str(raw_t).replace('.', ''))
  16.     # 模拟开始答题时间
  17.     starttime = datetime.fromtimestamp(
  18.         int(raw_t) - randint(1, 60 * 3)).strftime("%Y/%m/%d %H:%M:%S")

  19.     url = POST_URL_MAP.format(QUESTION_ID, t, starttime, rn)
  20.     return url


  21. def parse_post_data(resp):
  22.     '''
  23.     解析出问题和选项
  24.     返回post_data
  25.     '''
  26.     post_data = {'submitdata': ""}
  27.     questions = resp.html.find('fieldset', first=True).find('.div_question')

  28.     for i, q in enumerate(questions):
  29.         title = q.find('.div_title_question_all', first=True).text
  30.         choices = [t.text for t in q.find('label')]
  31.         random_index = randint(0, len(choices) - 1)
  32.         choice = choices[random_index]
  33.         post_data['submitdata'] += '{}${}}}'.format(i+1, random_index+1)
  34.         print(QUESTION_INFO.format(title, choices, choice))
  35.         time.sleep(0.5)
  36.     # 去除最后一个不合法的`}`
  37.     post_data['submitdata'] = post_data['submitdata'][:-1]
  38.     return post_data


  39. def post_answer(session, url, data):
  40.     '''
  41.     提交答案
  42.     '''
  43.     r = session.post(url, data)
  44.     print('提交状态:{}'.format(r.status_code))


  45. def simulate_survey():
  46.     '''
  47.     模拟回答问卷
  48.     '''
  49.     session = HTMLSession()
  50.     resp = session.get(QUESTION_URL)
  51.     url = parse_post_url(resp)
  52.     data = parse_post_data(resp)
  53.     post_answer(session, url, data)


  54. def main():
  55.     print('开始模拟填写问卷,共模拟{}次'.format(ANSWER_TIMES))
  56.     for i in range(ANSWER_TIMES):
  57.         simulate_survey()
  58.         sleep_time = randint(1, 60)
  59.         print('第{}次问卷填写完毕,即将沉睡{}s'.format(i+1, sleep_time))
  60.         time.sleep(sleep_time)


  61. if __name__ == '__main__':
  62.     main()
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表