*一、前言

**
笔者在家闲得无聊,突然想突破一下问卷星的反爬虫机制,顺便刷刷问卷,于是就开始分析了。
**

二、分析过程

**
1、fiddler抓包
模拟提交首先当然是打开fiddler看看提交了什么包啦。

2、分析不变参数
我们先来看不变的参数,这样的话我们把它作为一个常量就可以了。经过多次提交之后发现,submittype(答卷类型?),curID(答卷ID),rn(一个随机数random,但是在同一份问卷中是固定的),hlv(这个猜不出来)
3、分析变量
1、t参数
提交结束时间,因为这个时间总是比starttime晚,而且转化为时间戳就是一个具体的时间。
2、starttime参数
开始时间,见名知意,调查问卷也统计这个参数
3、ktimes
这个一开始也是百思不得其解,后来在提交按钮的Event Listeners的click事件中找到了ktimes关键字

在这个js文件中,ktimes被做了多次自增运算,我怀疑就是故意来坑刷题的人。(▼ヘ▼#),但是最后我直接放了一个随机数好像就蒙混过关了。。。
4、jqnonce参数
这个参数在问卷页面直接搜索关键字直接可以搜到,利用正则表达式截取就可以了。
5、jqsign参数
我更加加深了我的怀疑,这个参数也是故意来坑刷题的人的。他先是做了代码混淆,然后又做了一个莫名其妙的运算。。不过还好我为什么要和他硬碰硬呢?直接利用python库执行js代码,绕开他的签名算法。

三、网站的反爬措施

 暂时知道的有两个吧,一个是单IP提交30次左右直接标记为可疑IP,填问卷的时候疯狂弹验证码,解决这个问题我用了代理IP。另一个是不同IP20秒内提交11次左右问卷被标记为可疑问卷,此时所有填写IP都会疯狂弹验证码,解决这个问题我用了程序sleep的方式来使问卷退出黑名单。

四、代码如下

import random
import time
import requests
import urllib3
import execjs
import reurllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
requests.adapters.DEFAULT_RETRIES = 5
TARGET_URL = 'https://www.wjx.cn/jq/***.aspx'
headers = {'Connection': 'keep-alive','Content-Length': '24','Origin': 'https://www.wjx.cn','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36','Content-Type': 'application/x-www-form-urlencoded','Accept': '*/*','Referer': TARGET_URL,'Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.9','Cookie':'*****'
}# 代理服务器
proxies = {"http": proxyMeta,"https": proxyMeta,
}main_session = requests.session()
def get_jqnonce():response = requests.get(TARGET_URL, verify=False, timeout=5)html_text = response.textjq_list = re.findall('jqnonce.*";', html_text)jq_value = jq_list[0].split('"')time_list = re.findall('starttime.*";', html_text)time_value = time_list[0].split('"')return jq_value[1], time_value[1]def get_jqsign(jqnonce, ktimes):jsencrpt = """function dataenc(a,ktimes) {var c, d, e, b = ktimes % 10;for (0 == b && (b = 1), c = [], d = 0; d < a.length; d++) e = a.charCodeAt(d) ^ b, c.push(String.fromCharCode(e));return c.join("")}"""jsfunc = execjs.compile(jsencrpt)jqsign = jsfunc.call('dataenc', jqnonce, ktimes)return jqsignsubmittype = '1'
curID = re.findall('/[0-9]+', TARGET_URL)[0].replace('/', '')
(jqnonce, starttime) = get_jqnonce()
timeArray = time.strptime(starttime, "%Y/%m/%d %H:%M:%S")
rn = '1739566547'
hlv = '1'
print('--------------开始提交--------------------')
for i in range(0, 100):t = str(int(time.mktime(timeArray)) + random.randint(5, 30)) + str(random.randint(100, 999))  #模拟作答时间,同时补齐时间戳ktimes = random.randint(10, 100)jqsign = get_jqsign(jqnonce, ktimes)payload = {'submittype': submittype,'curID': curID,'starttime': starttime,'t': t,'rn': rn,'hlv': hlv,'ktimes': ktimes,'jqnonce': jqnonce,'jqsign': jqsign}submitdata = {'submitdata': '1$' + str(random.randint(1, 2)) + '}2$' + str(random.randint(1, 2))}  #作答结果随机response = main_session.post('https://www.wjx.cn/joinnew/processjq.ashx', verify=False, params=payload,data=submitdata,headers=headers, proxies=proxies)main_session.keep_alive = Falseprint(response.text)if re.findall('^7', response.text):print('发现验证码,我要睡一会')time.sleep(20)print('我醒了')print(f'提交到第{i}次')
print('--------------提交结束--------------------')

五、存在问题

首先还是效率比较慢,因为要长时间sleep而且没有采取协程或者多线程,还有就是存在一个严重的问题,header必须强制加入cookie否则会报错误,这个我很纳闷,我之前用第一次请求来传cookie竟然失效了,这个问题希望大佬可以解决一下。以及有其他问题都可以指出来,欢迎技术交流。

python问卷星模拟提交相关推荐

  1. Python问卷星批量填写,支持数据自定义分布

    Python问卷星调查问卷批量填写,支持树自定义分布 脚本环境 python3+基本python网络生态库 方法 self.wjxNumber改成填写的数量 self.wjxdata改成自己的数据分布 ...

  2. 自动填写问卷星并提交

    自动填写问卷星并提交 鉴于好多小伙伴要做数据分析的时候发放大量的问卷,但收回来的却寥寥无几,还受到其他小伙伴的冷眼,所以在下决定通过代码的方式,来实现问卷星的自动填写并提交. 以谷歌浏览器为例 1.随 ...

  3. 2021最新版 问卷星模拟浏览器自动填写(快速提交)python

    本代码仅供学习交流! 文章目录 前言 一.post失败 二.转向模拟浏览器 2.运行结果 总结 前言 尝试一下程序提交问卷星的可能.本来想的是post提交,小伙伴们有没有发现问卷星的加密难度是螺旋式升 ...

  4. python问卷星 自动答题_问卷星自动答题神器

    问卷星自动答题神器,由易语言编写的一个问卷星自动答题软件,输入答题界面地址即可实现多IP提交答题功能,可以设置提交份数,系统会模拟不同的IP进行作答并将答题内容上传到问卷星官方.可以进入问卷星官网界面 ...

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

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

  6. 问卷星自动提交-js脚本测试

    今天坐下js脚本分享,以问卷星的表单提交为例: 附上地址: https://sojump.com/jq/15569074.aspx var script = document.createElemen ...

  7. python问卷星自动填写

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

  8. java爬虫---问卷星自动提交问卷请求参数(jqsign,jqnonce等)解密

    以https://www.wjx.cn/jq/35713991.aspx这个问卷页为例 填完问卷打开控制台,转到network并且勾选preserver log(不然等会儿提交的请求看不到),点提交, ...

  9. 问卷星python自动提交_GitHub - Awacky/WJX_Autosubmit: 问卷星问卷自动提交,Python3版本,2020年8月仍有效...

    WJX_Autosubmit 问卷星自动提交,Python3版本,2020年8月仍有效.采用构建随机答案,不支持验证码. 目前github上的可用版本并不多,同时个人接触较多问卷星的问卷,便萌生了用P ...

最新文章

  1. MySQL中只会count(),sum()?累加运算没听过?
  2. APP的UI测试要点
  3. php文件上传参数设置
  4. Git 之四 分支管理
  5. 最易忽视的肾虚4件事
  6. 5.19 - Stacks and Queues
  7. python配置pip_Python pip源配置
  8. svn 版本控制操作命令
  9. 基于ADS的c语言程序设计实验,实验一:基于ADS软件传输线理论仿真设计与分析.docx...
  10. 电商美工手里没有C4D素材模板,不能体现有多厉害
  11. 电脑黑屏的原因有哪些
  12. oracle删除列的限制,深入理解Oracle索引(10):索引列字符类型统计信息的32位限制...
  13. 二分法04:猜数字大小
  14. php滑动门效果,基于JavaScript实现滑动门效果的代码实例介绍(图文)
  15. 卷积神经网络模型之——VGG-16网络结构与代码实现
  16. python 自动批量打开网页
  17. 5安卓输入法键盘显示 搜索_手机输入法谁更黑科技?讯飞搜狗百度大PK
  18. 无敌python爬虫教程学习笔记(一)
  19. 树莓派官方系统(raspbian)安装及使用教程
  20. Tecnomatix plant simulation 进阶--生产系统仿真:Plant Simulation应用教程

热门文章

  1. 从底层PLC设备到信息化,究竟有多远?
  2. 【语音识别】基于BP神经网络实现语音特征信号分类附matlab代码
  3. 爬取上海好玩的地方排名(去哪儿网)
  4. Dreh zelle acht hoch
  5. AMS 新闻视频广告的云原生容器化之路
  6. POI之PPT导出最简单实例
  7. Win11蓝牙驱动怎么更新?
  8. 打造个人IP的六个步骤
  9. 初入深度学习4——如何修改一个深度学习库
  10. 推特用户飙升;酷狗基于华为鸿蒙系统开发新应用;苹果新专利 可用手势操控车辆 | 每日大事件...