老见有人在CSDN上“哦”个不停,怀疑是用的Robot,在WSH中试了下可以用ActiveX,所以写了这么个东西,替我去接分 :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;
}