Python问卷星调查问卷批量填写,支持树自定义分布

脚本环境

python3+基本python网络生态库

方法

self.wjxNumber改成填写的数量
self.wjxdata改成自己的数据分布
clone问卷星网页URL即可
如果想提高填写速度可以减少sleep时间,但可能触发反扒机制


import requests
import re
import time
import random
import numpy as npclass WenJuanXing:def __init__(self, url):""":param url:要填写的问卷的url"""self.wj_url = urlself.post_url = Noneself.header = Noneself.cookie = Noneself.data_input()def set_data(self):"""这个函数中生成问卷的结果,:return:"""sumbitdata = ""for index in range(23):if self.wjdata[index][0] == 0:for i, num in enumerate(self.wjdata[index]):if i != 0:if num > 0:self.wjdata[index][i] -= 1sumbitdata += '{}${}}}'.format(index+1,i)breakelse:multiChoice = []for i, num in enumerate(self.wjdata[index]):if i != 0:if num > 0:self.wjdata[index][i] -= 1multiChoice.append(i)s =np.array(self.wjdata[index]).sum()offset = (np.array(self.wjdata[index]).sum() - 1) - self.wjNumberif offset < 0:self.wjdata[index][np.argmax(self.wjdata[index])] -= offsetself.wjdata[index][0] = 0sumbitdata += '{}$'.format(index+1)for choice in multiChoice:sumbitdata += '{}|'.format(choice)sumbitdata = sumbitdata[:-1]sumbitdata += '}'sumbitdata = sumbitdata[:-1]self.wjNumber -= 1data={'submitdata': sumbitdata}return datadef  data_input(self):"""这个函数用于录入自定义数据分布rowIndex =0 上的0、1分别代表单选和多选:return:"""self.wjdata = np.array([[0,164,136],[0,40,100,60,53,27,20],[0,37,200,63],[0,47,153,100],[0,278,22],[0,189,111],[0,11,136,150,3],[0,118,122,38,22],[1,48,72,212,42,11,83,15],[1,109,47,218,103,11],[0,234,46,20],[1,199,145,136,88,107,212,74,16],[0,49,121,130],[1,75,183,225,184,103,22],[0,74,186,37,3],[0,72,96,118,14],[0,31,243,26],[1,223,257,123,215,268],[0,11,101,124,64],[0,250,9,41],[0,193,23,81,3],[0,164,136],[0,227,45,1,27]])self.wjNumber = 300def set_header(self):"""随机生成ip,设置X-Forwarded-Forip需要控制ip段,不然生成的大部分是国外的:return:"""ip = '{}.{}.{}.{}'.format(112, random.randint(64, 68), random.randint(0, 255), random.randint(0, 255))self.header = {'X-Forwarded-For': ip,'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko\) Chrome/71.0.3578.98 Safari/537.36',}def get_ktimes(self):"""随机生成一个ktimes,ktimes是构造post_url需要的参数,为一个整数:return:"""return random.randint(15, 50)def get_response(self):"""访问问卷网页,获取网页代码:return: get请求返回的response"""response = requests.get(url=self.wj_url, headers=self.header)self.cookie = response.cookiesreturn responsedef get_jqnonce(self, response):"""通过正则表达式找出jqnonce,jqnonce是构造post_url需要的参数:param response: 访问问卷网页,返回的reaponse:return: 找到的jqnonce"""jqnonce = re.search(r'.{8}-.{4}-.{4}-.{4}-.{12}', response.text)return jqnonce.group()def get_rn(self, response):"""通过正则表达式找出rn,rn是构造post_url需要的参数:param response: 访问问卷网页,返回的reaponse:return: 找到的rn"""rn = re.search(r'\d{9,10}\.\d{8}', response.text)return rn.group()def get_id(self, response):"""通过正则表达式找出问卷id,问卷是构造post_url需要的参数:param response: 访问问卷网页,返回的reaponse:return: 找到的问卷id"""id = re.search(r'\d{8}', response.text)return id.group()def get_jqsign(self, ktimes, jqnonce):"""通过ktimes和jqnonce计算jqsign,jqsign是构造post_url需要的参数:param ktimes: ktimes:param jqnonce: jqnonce:return: 生成的jqsign"""result = []b = ktimes % 10if b == 0:b = 1for char in list(jqnonce):f = ord(char) ^ bresult.append(chr(f))return ''.join(result)def get_start_time(self, response):"""通过正则表达式找出问卷starttime,问卷是构造post_url需要的参数:param response: 访问问卷网页,返回的reaponse:return: 找到的starttime"""start_time = re.search(r'\d+?/\d+?/\d+?\s\d+?:\d{2}', response.text)return start_time.group()def set_post_url(self):"""生成post_url:return:"""self.set_header()  # 设置请求头,更换ipresponse = self.get_response()  # 访问问卷网页,获取responsektimes = self.get_ktimes()  # 获取ktimesjqnonce = self.get_jqnonce(response)  # 获取jqnoncern = self.get_rn(response)  # 获取rnid = self.get_id(response)  # 获取问卷idjqsign = self.get_jqsign(ktimes, jqnonce)  # 生成jqsignstart_time = self.get_start_time(response)  # 获取starttimetime_stamp = '{}{}'.format(int(time.time()), random.randint(100, 200))  # 生成一个时间戳,最后三位为随机数url = 'https://www.wjx.cn/joinnew/processjq.ashx?submittype=1&curID={}&t={}&starttim' \'e={}&ktimes={}&rn={}&jqnonce={}&jqsign={}'.format(id, time_stamp, start_time, ktimes, rn, jqnonce, jqsign)self.post_url = url  # 设置urlprint(self.post_url)def post_data(self):"""发送数据给服务器:return: 服务器返回的结果"""response = requests.post(url=self.post_url, data=self.set_data(), headers=self.header, cookies=self.cookie)return responsedef run(self):"""填写一次问卷:return:"""self.set_post_url()result = self.post_data()print(result.content.decode())def mul_run(self, n):"""填写多次问卷:return:"""for i in range(n):time.sleep(random.randint(3,12))self.run()print("已提交总数"+str(i)+"\n")if __name__ == '__main__':w = WenJuanXing('问卷星URL')w.mul_run(300) #实验次数

Python问卷星批量填写,支持数据自定义分布相关推荐

  1. python问卷星自动填写

    疫情期间闲着无聊,每天都要填写问卷星来报告健康情况,于是就拿python爬虫写了一个问卷星自动填写系统,一起来看看吧_ import requests import re import time im ...

  2. python爬取问卷星内容,Python 问卷星自动填写 爬虫

    Python帮你填问卷星 ps:网上看到的代码,虽然技术不深,但我觉得挺有用的,所以在此分享给大家 在某段时间朋友圈是否一直充斥着各种问卷调查,为了达成某种要求我们不断向好友求助填写问卷,今天,我就把 ...

  3. 问卷星自动填写python selenium脚本(2021vim版,亲测有效,看这一篇就够了)

    目录 前言 一.前期准备 二.具体步骤 1.导入库与预定义变量 2.打开浏览器,防止识别为脚本 3浏览问题,选择问题 4提交按钮,验证 全部代码 前言 问卷星已经成为收集问卷的一个很重要的工具,有时可 ...

  4. 用Python实现问卷星自动填写(超详细!!!)

    用Python实现问卷星自动填写(超详细!!!) 前言 一.配置环境 1.1安装依赖 1.2安装驱动 二.实战处理 2.1.引入库函数 2.2.程序所需函数详解 (1)自定义单选函数 (2)自定义多选 ...

  5. python 实现问卷星自动填写多份

    问卷星的问卷填写 工具:burpsuit,python 问卷星亲测,可以用python的requests库对问卷访问填写.首先对访问的页面进行抓包,得到的header部分照抄到requests的hea ...

  6. 学习python实现问卷星自动填写问卷

    学习python实现问卷星自动填写问卷 文章目录 学习python实现问卷星自动填写问卷 任务一:找帖子 思路一: 配置环境: 利用CSS选择器对页面进行解析 我们发现,我们所有的题目的回答的选项的标 ...

  7. Python实现问卷星自动填写和选择

    Python实现问卷星自动填写和选择 啊哈哈哈,我朋友叫我帮他填写问卷星,,我就直接写了个python脚本帮他一次性解决 全随机,全自动,一开始我用的是BP直接抓包发送,不过发送频率过快会让你验证,, ...

  8. JavaScript——问卷星自动填写

    一.前言: 我们学校要刷学术章,有些学术章又是指定在某个时间点填写问卷星的问卷报名的.但是由于我手速慢,导致总会有些时候报不上名,于是想着搞个代码实现自动填写问卷星的报名表.一顿操作后,在github ...

  9. python填写问卷星_Python填写问卷星

    主要使用python实现问卷星的自动填写和提交. 主要使用了https://www.jianshu.com/p/34961ceedcb4的代码,使用了X-Forwarded-For自动修改ip,我测试 ...

最新文章

  1. iview template模式_使用Iview Menu 导航菜单(非 template/render 模式)
  2. 怎么用cmd关闭系统弹窗_SD卡受损怎么修复?教你一招三步搞定
  3. UGUIAnimator模块知识点随记
  4. 分享Silverlight/WPF/Windows Phone一周学习导读(06月13日-06月18日)
  5. 果粉失望!iPhone 12系列依旧刘海屏,将升级Face ID元件
  6. 大学生学java要去培训机构吗?
  7. python函数不包括参数函数_python中实现函数不限制参数的数量
  8. 十个提升你Emacs生产力的高招
  9. python open可以打开什么类型文件_Python打开文件open()的注意事项
  10. 软考-计算机组成原理与结构
  11. Cadence Allegro PCB如何快速查找元器件
  12. Google Draco 源码解析
  13. 用单片机控制单色显示屏
  14. 网店系统哪个好,免费网店系统,网店系统排行
  15. 如何快速了解一个新的前端项目?
  16. 解决程序中出现小方块问题
  17. CSS如何使用伪元素选择器给所有的div里的文本前面添加小写罗马数字编号
  18. 如何解决缓存雪崩、击穿、穿透难题?
  19. UNITY与Mac⭐三、Unity打包苹果应用的教程
  20. keras中EarlyStopping(早停止)的用法和原理详解

热门文章

  1. android pad版本 yy,YY直播 在IOS端、Android端以及WEB端区别。
  2. 《联邦学习实战》杨强 读书笔记十四——构建公平的大数据交易市场
  3. YesPlayMusic :给你不一样的高颜值网易云音乐
  4. 《Python程序设计(第3版)》[美] 约翰·策勒(John Zelle) 第 5 章 编程练习答案
  5. 小信号采集的硬件设计方案注意事项及电源问题汇总
  6. 关于对pre-trained模型的使用和理解
  7. Mysql - 带条件计数(count)
  8. 达人评测 i5 11300h和r7 5800h哪个好r75800h和i511300h功耗
  9. 理科女生最吃香的十大职业(这十大职业就业率高)
  10. 通过usb linux 显示器,惠普的新款 4K 显示器都能通过 USB Type-C 驱动