• 破解【百度文库开学幸运大转盘】刷新限制


    活动地址:文库开学啦--幸运大转盘,惊喜不间断!

    今天,揣了半个多月的一千多个幸运星,准备在活动的最后一天抽奖(当然过期就失效了,赶紧把握)。

    可是百度的前端不知道怎么想的(可能出于防刷防挂),竟然每次抽完奖都要刷新一次页面!我有一百多次的抽奖机会,若等刷新,那不是烦死。。。

    为了节约抽奖花费的时间,遂决定破解它。

    首先,采取最简单的方法,重写关闭按钮(关闭弹窗之后才刷新)的oncilck事件。可是,看过代码结构之后,发现原始调用方法并不那么容易找着(其实我真的找不着),因为它的javascript代码经过压缩和混淆的,行数信息没什么意义。

    然后,就想到可以阻止刷新代码,于是覆盖了location.reload方法,可是chrome里,覆盖无效(直接覆盖location对象也不行,而内置的Date对象则是可以覆盖的),而且使用delete操作符也删除失败(这个预料之中,只是不试就不甘心)。

    接下来,就向window的onbeforeunload下手了。可是window.onbeforeunload=function (e){return false}却由浏览器弹出 是否离开 的询问框,于是再补充了利用e事件阻止默认行为的代码e.preventDefault();依然无效。唉,眼看午休时间就要完了,只能暂时放弃,按一下【抽奖】,关闭弹窗,再按ESC键,将就着抽了几十次奖。

    晚上回家,吃完晚饭再去百度抽奖,这回用的是火狐浏览器。

    按照中午的套路,重写一次location.reload方法,哈哈,火狐真大方,让改了。

    经过几次修改,火狐版最终代码如下:

    //    很奇怪,location.reload必须定义两次才成功
    location.reload = function(){}
    location.reload = function(){}
     
    //  按钮div(点击关闭弹窗并执行刷新代码)
    var mydivz = document.getElementsByClassName('know-btn')[0];
    
    //  模拟鼠标点击关闭按钮,原来打算用于setInterval的,后来直接赋给 关闭按钮的 onmouseover 事件
    function myC(){
      var myez = document.createEvent('MouseEvent');
      myez.initEvent('click', false, false);
      mydivz.dispatchEvent(myez);
    };
    
    //    setInterval(myC, 1000);    //    自动关闭弹窗
    
    //  最外围的弹窗容器
    var innerDivz = document.getElementsByClassName('inner')[0];
    //  加事件
    innerDivz.onmouseover = myC;

    控制台里运行上述代码,点击抽奖之后,鼠标移动到弹窗上就触发关闭事件,而且不会刷新,可以直接继续点抽奖。

    突然,快写完博文的时候,我意识到自己竟忘了最原始真实的东西。

    打开活动页面,再一次 点抽奖(会弹【亲,抽奖幸运星不够了啦...快去积攒幸运星再来抽奖吧^^】窗口,关闭之后也会刷新页面),然后,利用控制台去掉遮挡的浮层,发现,我可以继续点抽奖了。。。。

    其实,如果百度后台不是很严,也可以直接一个for循环,几百次post就过去了(获奖结果可以通过返回值的最后一个数字统计,从百度双肩背包的0开始,顺时针到苹果ipad2的11)

  • 相关阅读:
    中科大算法分析与设计分布式算法复习知识点
    记录一些实用网站
    《TensorFlow机器学习项目实战》pdf及源码
    DevC++连接MySQL可用详细教程
    【转】MySQL合理使用索引
    【原】基于Feign 重写自定义编码器
    【原】logback实现按业务输出到对应日志文件
    【原】MDC日志链路设计
    关于看源码的心得体会
    【原】基于Spring实现策略模式
  • 原文地址:https://www.cnblogs.com/xlst/p/2725115.html
Copyright © 2020-2023  润新知