一道腾讯面试题,大家看看如何??
首先给一个地址
http://pay.qq.com/include/login_box.html?url=http://pay.qq.com/
有工具 比如 firefox 、 google chrome 等网页代码查看工具。
要求用一段 js 实现下列功能,
已知 用户名 和 明文密码,实现 提交的过程,如果中间出现校验码,捕获校验码的图片。
时长120分钟。
结果面试失败。
------解决方案--------------------
大概的扒了一下页面,登录过程如下:
输入QQ号或者是QQ绑定的邮箱,当输入框失去焦点后,会进行验证以确定是否需要验证码(验证码的形式分两种,一种是生成一个图片,需要用户输入指定的字符,一种是程序返回时自带验证码,不用用户输入;有一种情况是不会触发请求的:清空输入框后,重新输入相同的字符串)
输入密码
如果需要,输入验证码
提交表单(这一过程中会将密码和验证码合并加密)
整个过程中的请求都是用<script>来完成的
验证图片的获取:
在整个登录过程中,没有发现一全局的状态变量可以用来判断是否生成了验证图片,但是程序中会有这样一个过程:当帐号输入框失去焦点后,如果本次输入的帐号与上次的不同,则会发送一个验证码请求,图片路径生成以后会使验证码输入框可见,并使密码输入框获取到焦点。所以可以从这里想办法获取到当前有的并且正确的图片路径。
以下是提交代码,没有写在生成了验证图片时获取并输入验证码的过程(只是猜测不会让你可以通过分析代码获取到的,如果有人分析出来了,那就爽了!!!):
JScript code
function loginIt(u, p) {
var ubox = document.getElementById('u');
var pbox = document.getElementById('p');
var img = document.getElementById('imgVerify');
var vf = document.getElementById("verifyinput");
var s = "";
ubox.focus();
ubox.value = u;
if(g_uin == u){
up();
} else {
addEvent(pbox, 'focus', up);
ubox.blur();
}
function addEvent(o, t, f) {
if(o.att) {
o.attachEvent('on' + t, f);
} else if(o.addEventListener) {
o.addEventListener(t, f, false);
}
}
function up() {
if(img.src && vf.style.display == '') {
s = img.src;
alert(s);
}
pbox.value = p;
document.getElementById('loginform').submit();
}
}