CSDN全自动灌水机

 
 
2006年4月
CSDN全自动灌水机
老见有人在CSDN上“哦”个不停,怀疑是用的Robot,在WSH中试了下可以用ActiveX,所以写了这么个东西,替我去接分 :D
 
把以下代码存为以“.js”为扩展名的文件,比如douche.js,然后在命令行下执行如下命令就可以了:
E:/kit/cscript douche.js //Nologo
 
平时工作常用PHP,所以用JS模拟了几个PHP的数组函数,附在了后面,这里用到了就随手写的,估计效率不高。
 
过段时间发布我的 IM 工具“QQQ”的源代码,造福全人类 :D
 

//----------------------------------------------
/*
*    douche.js
*    向 CSDN论坛 "http://community.csdn.net/" 灌水
*    Author:
*        高压锅 <Loadingao@msn.com>
*        www.gaoyaguo.com
*    Date: 2006.04.06
*    Version: 0.1
*/
//----------------------------------------------

var strDomain = "http://community.csdn.net"; // CSDN论坛的域名
var strPathBoard = "/Expert/ForumList.asp?typenum=1&roomid=1404"; // 欲灌版块的绝对路径
var strMyId = ""; // 此处为我的userID
var strCookie = ""; // 此处是我在CSDN登录后的Cookie值
var strUrlReply = "http://community.csdn.net/Expert/reply.asp"; // 灌水时form的action的地址
var msg = "%B6%A5%D2%BB%CF%C2%0D%0A%26random%3D"+Math.random(); // 要灌的水

var rejectUserNames = ['']; // 不灌该userName列表内的人的帖子
var rejectUserIds = ['']; // 不灌该userID列表内的人的帖子

var p = 1; // 从第1页开始
var arrReplyed = []; // 已灌过的ID列表
var arrRetry = []; // 被拒需要重试
var arrCurList = []; // 从getList()取得的当前ID列表
var countRefuse = 0; // 连续N次被拒之后休息一下的次数

while (1) {
    if (p == 11) p = 1;
    var htmlBoardList = getList(p);
    var match;
    var re = /<a/shref=/"//Expert//TopicView1/.asp/?id=(/d+?)/"/g;
    while ((match = re.exec(htmlBoardList)) != null) {
        arrCurList.push(match[1]);
    }
    arrCurList = array_diff(arrCurList, arrReplyed);
    arrCurList = array_merge(arrCurList, arrRetry);
    arrRetry = [];
    WScript.Echo(arrCurList);
    if (arrCurList.length == 0) {
        p = 1;
        WScript.Echo("没有新贴,休息6秒,重新开始");
        WScript.Sleep(6000);
        continue;
    }
    WScript.Echo("-=-=-=-=-=-第"+p+"页开始-=-=-=-=-=-");
    for (var i = 0; i < arrCurList.length; i++) {
        if (countRefuse == 3) {
            WScript.Echo("连续被拒3次,休息30秒");
            WScript.Sleep(10000);
            countRefuse = 0;
        }
        var strTopicId = arrCurList[i];

        if (in_array(strTopicId, arrReplyed)) {
            continue;
        }

        if (!checkIsReply(strTopicId)) {
            if (sendReply(strTopicId)) {
                WScript.Echo(strTopicId+": 成功");
                arrReplyed.push(strTopicId);
                countRefuse = 0;
            } else {
                WScript.Echo(strTopicId+": 被拒");
                arrRetry.push(strTopicId);
                countRefuse++;
            }
        } else {
            WScript.Echo(strTopicId+": 先前已回复过");
            arrReplyed.push(strTopicId);
        }
    }
    WScript.Echo("-=-=-=-=-=-第"+p+"页完成-=-=-=-=-=-");
    //p++; // 此开关 打开的话连续灌10页,关闭的话只灌第1页
}

/* --------------------------------------- function ---------------------------------------------- */

function getList(p) {
    if (typeof p == "undefined") p = 1;
    var url = strDomain+strPathBoard+"&whichpage="+p+"&random="+Math.random();
    try {
        var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        xmlHttp.open("GET", url, false);
        xmlHttp.setRequestHeader("Accept", "*/*");
        xmlHttp.setRequestHeader("Accept-Encoding", "gzip, deflate");
        xmlHttp.setRequestHeader("Accept-Language", "zh-cn");
        xmlHttp.setRequestHeader("Connection", "Keep-Alive");
        xmlHttp.setRequestHeader("Pragma", "no-cache");
        xmlHttp.setRequestHeader("Cache-Control", "no-cache");
        xmlHttp.setRequestHeader("Cookie", strCookie);
        xmlHttp.setRequestHeader("Host", "community.csdn.net");
        xmlHttp.setRequestHeader("Referer", "http://community.csdn.net/Tree/tree.htm");
        xmlHttp.setRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; i-NavFourF; .NET CLR 1.1.4322; InfoPath.1)");
        xmlHttp.send(null);
    } catch (e) {
        WScript.Echo("HTTP异常,10秒钟后重试");
        WScript.Sleep(10000);
        return 1;
    }
    return xmlHttp.responseText;
}

function checkIsReply(strTopicId) {
    try {
        var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        var strUrlTopic = strDomain+"/Expert/TopicView2.asp?id="+strTopicId;
        xmlHttp.open("GET", strUrlTopic, false);
        xmlHttp.setRequestHeader("Accept", "*/*");
        xmlHttp.setRequestHeader("Accept-Encoding", "gzip, deflate");
        xmlHttp.setRequestHeader("Accept-Language", "zh-cn");
        xmlHttp.setRequestHeader("Connection", "Keep-Alive");
        xmlHttp.setRequestHeader("Pragma", "no-cache");
        xmlHttp.setRequestHeader("Cache-Control", "no-cache");
        xmlHttp.setRequestHeader("Cookie", strCookie);
        xmlHttp.setRequestHeader("Host", "community.csdn.net");
        xmlHttp.setRequestHeader("Referer", "http://community.csdn.net/Tree/tree.htm");
        xmlHttp.setRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; i-NavFourF; .NET CLR 1.1.4322; InfoPath.1)");
        xmlHttp.send(null);
    } catch(e) {
        WScript.Echo("HTTP异常,10秒钟后重试");
        WScript.Sleep(10000);
        return 1;
    }
    try {
        var TopicName = xmlHttp.responseXML.documentElement.getElementsByTagName("Issue")[0].getElementsByTagName("TopicName")[0].text;
        if (/公务.*?/d{4}-/d{1,2}-/d{1,2}/g.test(TopicName)) {
            WScript.Echo(strTopicId+":<公务贴,略过>");
            return 1;
        }
        var intPoint = xmlHttp.responseXML.documentElement.getElementsByTagName("Issue")[0].getElementsByTagName("Point")[0].text;
        if (parseInt(intPoint) == 0) {
            WScript.Echo(strTopicId+":<0分贴,略过>");
            return 1;
        }
        var strPostUserName = xmlHttp.responseXML.documentElement.getElementsByTagName("Issue")[0].getElementsByTagName("PostUserName")[0].text;
        var strPostUserId = xmlHttp.responseXML.documentElement.getElementsByTagName("Issue")[0].getElementsByTagName("PostUserId")[0].text;
        if (in_array(strPostUserName, rejectUserNames) || in_array(strPostUserId, rejectUserIds)) {
            WScript.Echo(strTopicId+":<回避该用户>");
            return 1;
        }
        var Topics = xmlHttp.responseXML.documentElement.getElementsByTagName("Replys")[0];
        if (Topics.childNodes.length == 0) {
            WScript.Echo(strTopicId+":<沙发,快抢!>");
            return 0;
        }
        var countReply = 0;
        for (var i = 0; i < Topics.childNodes.length; i++) {
            if (Topics.childNodes.item(i).getElementsByTagName("PostUserId")[0].text == strMyId) {
                countReply++;
                break;
            }
        }
    } catch(e) {
        WScript.Echo("XML异常,10秒钟后重试");
        WScript.Sleep(10000);
        return 1;
    }
    return countReply;
}

// 发送回复
function sendReply(strTopicId) {
    try {
        var strPost = "Topicid="+strTopicId+"&xmlReply="+encodeURIComponent("aaaaa")+"&csdnname="+"&csdnpassword="+"&ReplyContent="+msg;
        var xmlHttpPost = new ActiveXObject("Microsoft.XMLHTTP");
        xmlHttpPost.open("POST", strUrlReply, false);
        xmlHttpPost.setRequestHeader("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");
        xmlHttpPost.setRequestHeader("Accept-Encoding", "gzip, deflate");
        xmlHttpPost.setRequestHeader("Accept-Language", "zh-cn");
        xmlHttpPost.setRequestHeader("Cache-Control", "no-cache");
        xmlHttpPost.setRequestHeader("Connection", "Keep-Alive");
        xmlHttpPost.setRequestHeader("Content-Length", "72");
        xmlHttpPost.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xmlHttpPost.setRequestHeader("Cookie", strCookie);
        xmlHttpPost.setRequestHeader("Host", "community.csdn.net");
        xmlHttpPost.setRequestHeader("Referer", "http://community.csdn.net/Expert/xsl/Reply_Xml.asp?Topicid="+strTopicId);
        xmlHttpPost.setRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; i-NavFourF; .NET CLR 1.1.4322; InfoPath.1)");
        xmlHttpPost.send(strPost);
    } catch (e) {
        WScript.Echo("HTTP异常,10秒钟后重试");
        WScript.Sleep(10000);
        return 1;
    }
    return !/<html><body><br><br><font color=red>.*?<//font><br><//body><//html>/.test(xmlHttpPost.responseText);
}

/*
某值是否在某数组中
*/
function in_array(d, arr) {
    for (var i in arr) {
        if (arr[i] == d) return true;
    }
    return false;
}

// 合并数组,后面的覆盖前面的
// 依赖 in_array()
function array_merge(arr1, arr2) {
    var arr = arr1;
    for (var i in arr2) {
        if (!in_array(arr2[i], arr)) arr.push(arr2[i]);
    }
    return arr;
}

// 计算数组的差集
// 返回一个数组,该数组为在 array1 中但是不在 array2 中的值
// 依赖 in_array()
function array_diff(arr1, arr2) {
    var arr = [];
    for (var i in arr1) {
        if (!in_array(arr1[i], arr2)) arr.push(arr1[i]);
    }
    return arr;
}

 

JS模拟的PHP数组类函数:

/*
某值是否在某数组中
*/
function in_array(d, arr) {
    for (var i in arr) {
        if (arr[i] == d) return true;
    }
    return false;
}

// 合并数组,后面的覆盖前面的
// 依赖 in_array()
function array_merge(arr1, arr2) {
    var arr = arr1;
    for (var i in arr2) {
        if (!in_array(arr2[i], arr)) arr.push(arr2[i]);
    }
    return arr;
}

// 计算数组的差集
// 返回一个数组,该数组为在 array1 中但是不在 array2 中的值
// 依赖 in_array()
function array_diff(arr1, arr2) {
    var arr = [];
    for (var i in arr1) {
        if (!in_array(arr1[i], arr2)) arr.push(arr1[i]);
    }
    return arr;
}

// 移除数组中重复的值
// 返回一个数组
// 依赖 in_array()
function array_unique(arr) {
    var ret = [];
    for (var i in arr) {
        if (!in_array(arr[i], ret)) ret.push(arr[i]);
    }
    return ret;
}

function array_keys(arr) {
    var ret = [];
    for (var i in arr) {
        ret.push(i);
    }
    return ret;
}

function aray_values(arr) {
    var ret = [];
    for (var i in arr) {
        ret.push(arr[i]);
    }
    return ret;
}

function array_reverse(arr) {
    var ret = [];
    for (var i in arr) {
        ret.unshift(arr[i]);
    }
    return ret;
}

function array_map(strAction, arr) {
    for (var i in arr) {
        arr[i] = eval(strAction+"("+arr[i]+")");
    }
    return arr;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值