Python 自动提交问卷星随机答案

Python 提交问卷星随机答案

毕业需要大量的问卷调查,手动提交几分后发现,太麻烦了!
是否可以通过Python进行直接提交
答案肯定不能都一样,必须随机选取

参考不知道是否是原文,但是从这里找到的!原文地址

需要的准备

  • 首先通过抓包软件对数据进行分析
  • 爬取免费代理IP网站发布的Ip地址池,构建IP地址池
  • 调用fake_useragent库中的User_Agent方法,获取随机浏览器标示
  • Heard中需要包涵的内容,通过抓包就可以全部获取到
    • Host
    • User-Agent
    • Content-Type
    • Referer
    • Cookie
    • X-Forwarded-For
小细节
  • 由于post地址采用https协议,所以如果直接使用requests方法来传参,将会报错(可能是证书相关的问题,这里就不深究了),那么可以通过以下方法解决
import requests
requests.packages.urllib3.disable_warnings()#缺少将会报错警告,但好像不影响脚本运行
r = requests.post(url, headers=headers, data=data, verify=False)# verify默认是True的,所以手工设置为False,
  • 意外错误,使用Python3.7进行执行的时候会报错
    urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)>
    解决方法,使用Anaconda就不会有问题。暂时没有做太多的研究。

开始编辑代码
导入到模块

import requests
import urllib.request
from fake_useragent import UserAgent
import re
import random
import time

获取IP代理池

def Get_IP():
    headers = {
        'User-Agent': UserAgent().random
    }
    html = urllib.request.Request(url='https://www.xicidaili.com/nn/', headers=headers)
    html = urllib.request.urlopen(html).read().decode('utf-8')
    reg = r'<td>(.+?)</td>'
    reg = re.compile(reg)
    pools = re.findall(reg, html)[0:499:5]
    Random_IP = random.choice(pools)
    return Random_IP

编写Heards

def Get_Headers():
    headers = {
        'Host':'www.wjx.cn',
        'User-Agent': UserAgent().random,#随机User-Agent,需要从fake_useragent 库中 UserAgent包
        'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8', # 以表格形式提交数据
            'Referer':'https://www.wjx.cn/m/xxxxx.aspx',#你的调查问卷链接
        'Cookie': " ", #抓包写自己的
        'X-Forwarded-For':Get_IP(),#调用函数获取代理IP地址
    }
    return headers

编构建传参函数用来提交参数

def Auto_WjX():
    url = '目的url' # 这个也可以抓取到
    #data是提交的参数(填写的问卷数据需要自己按实际情况编写)
    #若包含中文参数则需要指定编码,例:data = 'submit=1$2}2$3}3$python大法好啊'.encode("utf-8").decode("latin1")
    # 根据数据的规则可以看出来1是第一题,$后面是选项 如果多选的的话是1|3.
      # 标准答案
    # data = "submitdata=1$2}2$1}3$2}4$2}5$1|3|4}6$3}7$1}8$2}9$2}10$2}11$1}12$2}13$1|2|4|5}14$2}15$3}16$1|3}17$2}18$5}19$2}20$1|2|3}21$1!1;6,2!1;5;6,3!1;3;4}22$1}23$1|2|3}24$1|2|4}25$1|2|4}26$"

    #随机答案(使用random.randint随机整数进行选择答案,本人因题太多,所以把data数据进行截断,只是为了好看点。如果题少点话,可以直接写一条data数据。)
    # one 1--10题
    one = "submitdata=1$%s}2$%s}3$%s}4$2}5$%s|%s|%s}6$%s}7$%s}8$%s}9$%s}10$%s}" % (random.randint(1, 2), random.randint(1, 3), random.randint(1, 3), random.randint(1, 2),random.randint(3, 4), random.randint(5, 6), random.randint(1, 5), random.randint(1, 2), random.randint(1, 3),random.randint(1, 2), random.randint(1, 2))
    # two 11--20题
    two = '11$1}12$%s}13$%s|%s}14$%s}15$%s}16$%s|%s}17$%s}18$%s}19$%s}20$%s|%s}' % (random.randint(1, 2), random.randint(1, 3), random.randint(4, 5), random.randint(1, 4),random.randint(2, 3), random.randint(1, 2), random.randint(3, 4), random.randint(1, 2), random.randint(3, 5),random.randint(1, 3), random.randint(1, 2), random.randint(3, 4))
    # 21题到后面
    three = "21$1!%s;%s,2!%s;%s;%s,3!%s;%s;%s}22$1}23$1|%s}24$%s|%s}25$%s|%s}26$" % (random.randint(1, 3), random.randint(4, 7), random.randint(1, 2), random.randint(3, 4), random.randint(5, 7),random.randint(1, 2), random.randint(3, 4), random.randint(5, 7), random.randint(2, 3),random.randint(1, 2), random.randint(3, 4), random.randint(1, 2), random.randint(3, 4))
    data = one + two + three
    
    r = requests.post(url, headers=Get_Headers(), data=data, verify=False)
    result = r.text[0:2]
    resultt = r.text[-3:]
    return result,resultt

编写自己的mian函数了

def main():
    global PostNum
    for i in range(500):
        num = Auto_WjX()
        if int(num[0]) in [10]:
            print("\033[1;32;47m第%s份问卷  ===> 提交成功\033[0m" % num[1])
            PostNum += 1
        else:
            print('\033[5;31;47m第%s份问卷  ===> 提交失033[0m' % num[1])

        print("30秒后再次提交,请等待")
        time.sleep(30)  # 设置休眠时间,这里要设置足够长的休眠时间

    print('脚本运行结束,成功提交%s份调查报告' % PostNum)  # 总结提交成功的数量,并打印

if __name__ == '__main__':
    main()

仅供研究学习,勿要滥用!
完整代码

import requests
import urllib.request
from fake_useragent import UserAgent
import re
import random
import time
from multiprocessing import Process

requests.packages.urllib3.disable_warnings()
PostNum = 0

def Get_Headers():
    headers = {
        'Host':'www.wjx.cn',
        'User-Agent': UserAgent().random,
        'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
        'Referer':'https://www.wjx.cn/m/xxxxxxx.aspx',
        'Cookie': "acw_tc=2f624a2715707742490114846e11af314ae7a232ed18707c9ed7d7796002c8; .ASPXANONYMOUS=aD0md4y21QEkAAAANmIzNGIzNDEtNDk4OS00MjNjLTg5YTItMjU2YWIwMTdkZGM4_qytsxBWi11-sOz1HwVnB_Y516Q1; jac47027148=19962282; %26ntime%3D1570771906; Hm_lvt_21be24c80829bd7a683b2c536fcf520b=1570774251; Hm_lpvt_21be24c80829bd7a683b2c536fcf520b=1570774251; jpckey=%u5927%u5B66%u751F",
        'X-Forwarded-For':Get_IP(),
    }
    return headers

def Get_IP():
    headers = {
        'User-Agent': UserAgent().random
    }
    html = urllib.request.Request(url='https://www.xicidaili.com/nn/', headers=headers)
    html = urllib.request.urlopen(html).read().decode('utf-8')
    reg = r'<td>(.+?)</td>'
    reg = re.compile(reg)
    pools = re.findall(reg, html)[0:499:5]
    Random_IP = random.choice(pools)
    return Random_IP

def Auto_WjX():
    # url = "https://www.wjx.cn/joinnew/processjq.ashx?curid=47027148&starttime=2019%2F10%2F11%2011%3A28%3A55&source=directphone&submittype=1&ktimes=133&hlv=1&rn=2945543818.43549698&jpm=13&iwx=1&t=1570764567174&jqnonce=f9077c2c-27d4-44a1-8d65-b86cc2be27ff&jqsign=e%3A344%601%60.14g7.77b2.%3Bg56.a%3B5%60%601af14ee"
    url = 'https://www.wjx.cn/joinnew/processjq.ashx?curid=470x148&starttime=2019%2F10%2F11%2014%3A10%3A48&source=directphone&submittype=1&ktimes=274&hlv=1&rn=2073019949.19962282&jpm=13&iwx=1&t=1570774285057&jqnonce=684e1271-560c-4455-90b4-121a612b065e&jqsign=2%3C0a5635)124g)0011)%3D4f0)565e256f421a'


    # 标准答案
    # data = "submitdata=1$2}2$1}3$2}4$2}5$1|3|4}6$3}7$1}8$2}9$2}10$2}11$1}12$2}13$1|2|4|5}14$2}15$3}16$1|3}17$2}18$5}19$2}20$1|2|3}21$1!1;6,2!1;5;6,3!1;3;4}22$1}23$1|2|3}24$1|2|4}25$1|2|4}26$"

    #随机答案
    one = "submitdata=1$%s}2$%s}3$%s}4$2}5$%s|%s|%s}6$%s}7$%s}8$%s}9$%s}10$%s}" % (random.randint(1, 2), random.randint(1, 3), random.randint(1, 3), random.randint(1, 2),random.randint(3, 4), random.randint(5, 6), random.randint(1, 5), random.randint(1, 2), random.randint(1, 3),random.randint(1, 2), random.randint(1, 2))
    two = '11$1}12$%s}13$%s|%s}14$%s}15$%s}16$%s|%s}17$%s}18$%s}19$%s}20$%s|%s}' % (random.randint(1, 2), random.randint(1, 3), random.randint(4, 5), random.randint(1, 4),random.randint(2, 3), random.randint(1, 2), random.randint(3, 4), random.randint(1, 2), random.randint(3, 5),random.randint(1, 3), random.randint(1, 2), random.randint(3, 4))
    three = "21$1!%s;%s,2!%s;%s;%s,3!%s;%s;%s}22$1}23$1|%s}24$%s|%s}25$%s|%s}26$" % (random.randint(1, 3), random.randint(4, 7), random.randint(1, 2), random.randint(3, 4), random.randint(5, 7),random.randint(1, 2), random.randint(3, 4), random.randint(5, 7), random.randint(2, 3),random.randint(1, 2), random.randint(3, 4), random.randint(1, 2), random.randint(3, 4))
    data = one + two + three

    r = requests.post(url, headers=Get_Headers(), data=data, verify=False)
    result = r.text[0:2]
    resultt = r.text[-3:]
    return result,resultt

def main():
    global PostNum
    for i in range(500):
        num = Auto_WjX()
        if int(num[0]) in [10]:
            print("\033[1;32;47m第%s份问卷  ===> 提交成功\033[0m" % num[1])
            PostNum += 1
        else:
            print('\033[5;31;47m第%s份问卷  ===> 提交失033[0m' % num[1])

        print("30秒后再次提交,请等待")
        time.sleep(30)  # 设置休眠时间,这里要设置足够长的休眠时间

    print('脚本运行结束,成功提交%s份调查报告' % PostNum)  # 总结提交成功的数量,并打印

if __name__ == '__main__':
    main()

多进程源码就不放了,和上面单进程基本一致,只是从multiprocessing 调用了Process方法。可以实现多个进程一起进行提交!

有兴趣的可以私下交流

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260