问卷星全自动填写脚本浅尝

一、需求分析

  • 这两天有一个小伙伴出于论文的需要,请教我是否有办法可以给问卷星刷单。由于需要几百份的数据,人工刷起来比较麻烦,为此我便研究了一番。
  • 刚开始尝试py脚本,使用post表单的方式进行刷单。经过尝试后发现,在post的请求链接中包含有许多个参数需要进行对应的计算才能得到的。由于继续这个方式,需要研究网页的源码,感觉比较费劲,暂时搁置了。
  • 之后尝试了使用模拟操作的方式进行,过程使用油猴脚本进行模拟操作,最终也实现了想要的功能。
  • 贴一下原文地址:https://itxiaoye.top/article/10 [ [ 我的文章] ]

二、工具选取

  1. 油猴插件 [ 下载 ]:这个插件很好玩的,还可以找到各种浏览器的油猴脚本,例如:视频去vip等等;
  2. 代码编辑器:我用的vscode进行的代码编辑,按照个人的代码编写习惯,只要是能够进行文本编辑的软件就可以了;
  3. AutoHotkey [ 下载 ]:这是一个可以运行在电脑上进行模拟操作的脚本编译器,我也是第一次用,可以一块探讨学习,挺有意思的!

三、摸索过程

急切需要得知解决方案de小伙伴们,可以直接奔向==>【四、解决方案】

20220313

  1. 一开始直接使用 fiddler 抓包工具,监听问卷星填单完成后提交的请求,从中找到对应的请求链接和发送数据,使用py模拟相同的post请求:

    ua = UserAgent()
    def get_headers() -> json:
    	return {
        	"User-Agent": ua.random, #随机代理
        	"Referer": "https://www.wjx.cn/jq/27644141.aspx",
        	"Origin": "https://www.wjx.cn",
    	}
    
    url = "https://www.wjx.cn/joinnew/processjq.ashx?curID=27644131&submittype=1&t=1647062508952&starttime=2022%2F3%2F12%2013%3A21%3A28&ktimes=169&rn=2104031809&jqpram=HMLSiLXZb&hlv=1&sd=http%3a%2f%2fwww.wjx.cn%2f&jqnonce=df6a765a-2be7-47f9-97f2-94304e4138f2&jqsign=mo%3Fh%3E%3F%3Ch%24%3Bkl%3E%24%3D%3Eo0%240%3Eo%3B%240%3D%3A9%3Dl%3D8%3A1o%3B&jwt=6&nw=1&jpm=55"#请求链接
    data ="submitdata=1%243%7D2%241%7D3%241%7D4%241%7C2%7D5%243%7D6%243%7D7%243%7D8%242%7D9%242%7D10%246%7C7%7D11%243%7D12%243%7D13%242" #请求数据
    sleep_time = 12 # 休眠时间
    
    while True:
        try:
            r = requests.post(url, headers=get_headers(), data=data)
    	print("------ "+datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]+" ,"+str(r.text)+"------")
        except Exception as e:
            logging.error(e)
        time.sleep(sleep_time)
    
  2. 经过测试发现,请求的时候会返回提示(------ 2022-03-14 17:57:33.678 ,7〒请点击智能验证码进行验证!------),经过分析发现是请求链接后边的一堆变量需要根据特定的规则进行刷新才行。如果要解决遇到的问题,需要分析网站的源代码,所以就暂时尝试其他的办法。

20220314

  1. 分析问卷星的提单操作:(1)填完题目后;(2)需要点击提交按钮;(3)点击弹出的智能验证按钮;(4)进行滑块操作。

  2. 点击浏览器中已经安装好的油猴插件,选择添加脚本
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HMM8LTU7-1647271049306)(https://api.itxiaoye.top/uploads/imgs/article/20220314/35e4af2628255b7dea2f61154a51fd23.png)]

  3. 输入问卷星刷的自动化操作脚本。我的油猴脚本代码,可以进行下载或者安装使用 [ 脚本 ]
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kLBE6hnL-1647271049310)(https://api.itxiaoye.top/uploads/imgs/article/20220314/f38e0d7e42a941beca6b20505a8e4c9d.png)]

  4. 启动刚安装的油猴脚本,打开我对应的问卷网址 [ 问卷 ],便能够自动进行问卷刷单。当前只是简单做了一些单选题目,并且设置每个题目选项的概率,同时考虑到题目的关联性。更多的逻辑操作、更多的其他类型题目可以举一反三,修改油猴脚本进行完成(需要会JavaScript语言编程基础)。

  5. 在刷的次数比较多了之后会出现如下报错,这时候就是因为智能验证没有过关。经过分析,智能验证是会检测用户的点击是为脚本点击还是真实点击(会在click操作的时候获取对应的浏览器数据判断当前是否真的有鼠标点击),这个问题通过油猴脚本暂时没有解决方案。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5XNZwe7J-1647271049312)(https://api.itxiaoye.top/uploads/imgs/article/20220314/ec8a9cd2a2afd56eca9f56e7c2ebc062.png)]

  6. 上边遇到的智能验证问题,我找到了一个比较好的解决方法,可以算是通过降维打击进行解决。我们编写的油猴脚本是跑着浏览器上的,它并不能解决浏览器本身限制的问题,但是浏览器是在电脑上边的,所以可以通过电脑上边入手。
    不卖关子了,就是通过类似按键精灵的方式,使用电脑的自动脚本进行鼠标的操作,使得浏览器认为鼠标有真实的动作事件。

  7. 根据上边提到的,我便使用 AutoHotkey [ 官方教程 ] 进行对应的操作。
    在刷问卷的同时,我会启动鼠标定时移动一下并且点击一下,这样能确保浏览器在智能验证的时候识别到鼠标事件,判断点击有效。对应的 AutoHotkey 代码如下,需要先运行脚本,然后在启动了油猴脚本刷单之后,按下 ctrl+j 启动鼠标定时事件(需要将鼠标移动到旁边空白的位置,避免误点),在停止的时候,按下 ctrl+q 停止鼠标定时事件。

    stop := false
    
    ^q::
    	stop := true
    
    ^j::
    	Loop
    		{
    			MouseGetPos, xpos, ypos
    			MouseClick, , %xpos%, %ypos%
    			MouseMove, 0, %ypos%
    			MouseMove, %xpos%, %ypos%
    			Sleep , 3000
    		}
    	Until stop
    
  8. 需要注意的一些问题:(1)使用同一个ip进行刷问卷,在刷了几十上百个的时候可能会出现提交不成功的问题,这个可能是问卷星后台限制了同一个ip的填单速度,我测试停止一小段时间后便能够再次快乐刷起来;(2)使用f12获取右键查看源码,会导致刷问卷失败的问题

四、解决方案

  1. 在浏览器中安装油猴插件,然后安装对应的自动刷问卷星的代码 [ 脚本 ]
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M9WHDxFx-1647271049314)(https://api.itxiaoye.top/uploads/imgs/article/20220314/f38e0d7e42a941beca6b20505a8e4c9d.png)]

  2. 使用 AutoHotkey [ 官方教程 ] 解决提交问卷之前的智能验证问题。
    对应的 AutoHotkey 代码如下,需要先运行脚本,然后在启动了油猴脚本刷单之后,按下 ctrl+j 启动鼠标定时事件(需要将鼠标移动到旁边空白的位置,避免误点),在停止的时候,按下 ctrl+q 停止鼠标定时事件。

    stop := false
    
    ^q::
    	stop := true
    
    ^j::
    	Loop
    		{
    			MouseGetPos, xpos, ypos
    			MouseClick, , %xpos%, %ypos%
    			MouseMove, 0, %ypos%
    			MouseMove, %xpos%, %ypos%
    			Sleep , 3000
    		}
    	Until stop
    
  3. 启动刚安装的油猴脚本,打开我对应的问卷网址 [ 问卷 ],便能够自动进行问卷刷单。当前只是简单做了一些单选题目,更多的其他类型题目可以举一反三,修改油猴脚本进行完成(需要会JavaScript语言编程基础)。

  4. 需要注意的一些问题:(1)使用同一个ip进行刷问卷,在刷了几十上百个的时候可能会出现提交不成功的问题,这个可能是问卷星后台限制了同一个ip的填单速度,我测试停止一小段时间后便能够再次快乐刷起来;(2)使用f12获取右键查看源码,会导致刷问卷失败的问题

五、总结

  • 完成时间:2022-03-14 23:02
  • 出于需求和好奇,进行并完成了这一次自动化操作脚本的开发。这一个小探索,只是简单完成了自动操作的流程,中间的详细逻辑和特定的功能需求还需要小伙伴们自己根据需要进行油猴脚本的修改。
  • AutoHotkey 这个电脑的自动操作脚本也是我第一次使用,感觉还是挺有意思的!
  • 在探索的过程中,使用py脚本进行post数据刷问卷的方法还没有完全走通,这个需要花些时间研究一下网页逻辑代码,感兴趣的小伙伴们也可以一块探讨探讨~
  • 5
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值