用模拟精灵写的自动投票系统

<?xml version="1.0" encoding="gb2312" ?>
<ApeML LID="CHS" MD="0" 抓屏模式="0" 名称="icctv-vote" 作者="xing006" 信息窗口="false" 速度="15" 循环次数="20" 自定义属性="ConnectionName = adsl,ConnectionPassword = m7x9b6r4,ConnectionUser = 100001230164">
 <!--创建时间:2005年11月30日-05:07-->
 <脚本区块 语言="LAScript" 名称="init" 延时="0" 启用="true" 编辑密钥="" 运行公钥="">
  <![CDATA[
_set = ape:loadSetting(); --读取自定义属性
stopPlay = function() --这个函数回放停止时被调用.
 ape:saveSetting(_set); --保存自定义属性
 collectgarbage();--清理内存
end;

import("net");
import("clean");

Forms=net.System.Windows.Forms
Drawing=net.System.Drawing

Form=Forms.Form
TextBox=Forms.TextBox
Label=Forms.Label
Button=Forms.Button
Point=Drawing.Point
Size=Drawing.Size
FormStartPosition=Forms.FormStartPosition
wb = web.new();

identify= function()
  
  clean.IE(false,true);
  local strUrl="http://"
  
  wb:setSilent(true,true);
  wb:go(strUrl);
  wb:show(false); 
  delay(200);
  
  for i=1,100,1 do      
   if(wb:getEle("CheckCode_input"))then
    local img=image.new();   
    img:getURL("http://","*.gif");
    
    if(img:ok())then
     img:corp(5,4,41,14);--对图进行修剪;
     local img2,img3,img4,img5=img:split(1,4);
     if(img2)then
      img2:median(2);--是否加中值滤波,及中值滤波的值,要根据实际情况进行调整。;
      img3:median(2);
      img4:median(2);
      img5:median(2);
     end;
  
     imgBinKey=bytestoImg();--得到包含样本图片的表
     local str="";--识别出来的文字
     str=test(imgBinKey,img2);
     str=str..test(imgBinKey,img3);
     str=str..test(imgBinKey,img4);
     str=str..test(imgBinKey,img5);   
     local ele=wb:getEle("CheckCode_input")
     ele:setAttribute("value",str);
     ele:submit();--提交表单
     image.del(img);
     image.del(img2);
     image.del(img3);
     image.del(img4);
     image.del(img5);
     element.del(ele);
     break;         
    end;
   end;
 
   if(i==100)then
    return false;
   end;
   delay(100)   
  end; 
  return true;
end;

function isConnect(url)

 local str = web.getURL(url);
 if (str=="")then 
  return false;
 end;

 if( string.find( str, "找不到服务器" ) )then
   return false;
 end;

 if( string.find( str , "没有可以显示的页面" ) )then
    return false;
 end;
 return true;
end;


function isConnectX()
 NETWORK_ALIVE_LAN  = 0x00000001 --是否有可用网卡
 NETWORK_ALIVE_WAN  = 0x00000002 -- 是否有可用远程连接
 NETWORK_ALIVE_AOL  = 0x00000004 -- NETWORK_ALIVE_AOL(仅对98/95有效判断是否联上美国的网络)

 --IsNetworkAlive的参数是传址的,所以需要用P来标记参数类型,然后在返回值中添加一个返回值flag
 IsNetworkAlive = dll.open("sensapi.dll", "IsNetworkAlive", "I(P)","stdcall")
 ok,flag = IsNetworkAlive(NETWORK_ALIVE_WAN); --ok对应上面的默认返回值I,flag对应上面的输出参数返回值P
 -- 注意上面的参数 ,应在网络连接以后延迟一下再检测是否有活动的连接

 if( ok == 0 )then
     return false;
 else
     if( (flag & NETWORK_ALIVE_WAN) == NETWORK_ALIVE_WAN)then
         return true;
     else
         return false;
     end;
 end;
end;

bytestoImg= function()
 local codeKey=ape:loadTable("验证码样本");--从数据岛读取表
 local imgBinKey={};--这个表是放真正的图像的
 
 toImage= function(k,v)
  local img9=image.new();
  img9:setBytes(string.decode(v,""),"*.gif");
  imgBinKey[k]=img9;
 end;
 
 table.foreach(codeKey,toImage)
 return imgBinKey;--调用函数,将返回包含样本图片的表
end;

test= function(imgBinKey,imgX)
 local limit=9999;
 local chr="";
 
 testImg= function(k,v)
  local n=imgX:testXX(imgBinKey[k]);
  if (n<limit) then
   limit=n;
   chr=k.."";
  end;
 end;
 
 table.foreach(imgBinKey,testImg);
 return chr
end; 

function dail(connN,connU,connP)
 collectgarbage();
 win.exec(win.getSysDir().."//rasdial.exe"," "..connName.." /DISCONNECT",win.getSysDir(),0);
 delay(2*1000); --延时2秒  
 win.exec(win.getSysDir().."//rasdial.exe"," "..connName.." "..connUser.." "..connPassword,win.getSysDir(),0);
 delay(5*1000); --延时2秒
end;


function btnVote_click(sender,args)
 


 connName = txtConnectionName.Text;
 connUser = txtConnectionUser.Text;
 connPassword = txtConnectionPassword.Text;
 
 ape:setRunNumber(txtVoteCount.Text);
 local i = 0;
 local j= ape:getRunNumber();
 while(i<j)
 do
  if(math.mod(i,10)==0)  then
   dail(connName,connUser,connPassword);
   if(isConnectX())then
       if(identify())then
     i=i+1
     lblValue.Text = i.."/"..j
     delay(1000);
    end;
   end;   
  else
   if(not isConnectX())then    
    dail(connName,connUser,connPassword);
   end;
   if(identify())then
    i = i + 1;
    lblValue.Text = i.."/"..j;
    delay(1000);
   end;
  end;  
 end;
end;


form = Form();
txtVoteCount = TextBox();
txtConnectionName = TextBox();
txtConnectionUser = TextBox();
txtConnectionPassword = TextBox();
lblVoteCount = Label();
lblConnectionName = Label();
lblConnectionUser = Label();
lblConnectionPassword = Label();
lblPercent = Label();
lblValue = Label();
btnVote = Button();
 
form:SuspendLayout();
 
lblVoteCount.Location = Point(10, 10);
lblVoteCount.Name = "lblVoteCount";
lblVoteCount.Size = Size(40, 10);
lblVoteCount.TabIndex = 0;
lblVoteCount.Text = "票数:";
 
txtVoteCount.Location = Point(80, 10);
txtVoteCount.Name = "txtVoteCount";
txtVoteCount.Size = Size(60, 60);
txtVoteCount.TabIndex = 1;
txtVoteCount.Text ="20000"
 
lblConnectionName.Location = Point(10, 40);
lblConnectionName.Name = "lblConnectionName";
lblConnectionName.Size = Size(70, 10);
lblConnectionName.TabIndex = 2;
lblConnectionName.Text = "拔号连接名:";
 
txtConnectionName.Location = Point(80, 40);
txtConnectionName.Name = "txtConnectionName";
txtConnectionName.Size = Size(60, 60);
txtConnectionName.TabIndex = 3;
txtConnectionName.Text ="adsl" 
 
lblConnectionUser.Location = Point(10, 70);
lblConnectionUser.Name = "lblConnectionUser";
lblConnectionUser.Size = Size(70, 10);
lblConnectionUser.TabIndex = 4;
lblConnectionUser.Text = "拔号用户名:";
 
txtConnectionUser.Location = Point(80, 70);
txtConnectionUser.Name = "txtConnectionUser";
txtConnectionUser.Size = Size(60, 60);
txtConnectionUser.TabIndex = 5;
txtConnectionUser.Text ="100001230164"
 
lblConnectionPassword.Location = Point(10, 100);
lblConnectionPassword.Name = "lblConnectionPassword";
lblConnectionPassword.Size = Size(70, 10);
lblConnectionPassword.TabIndex = 6;
lblConnectionPassword.Text = "拔号密码:";
 
txtConnectionPassword.Location = Point(80, 100);
txtConnectionPassword.Name = "txtConnectionPassword";
txtConnectionPassword.Size = Size(60, 60);
txtConnectionPassword.TabIndex = 7;
txtConnectionPassword.Text ="m7x9b6r4";

lblPercent.Location = Point(10, 130);
lblPercent.Name = "lblPercent";
lblPercent.Size = Size(70, 10);
lblPercent.TabIndex = 8;
lblPercent.Text = "进度:";

lblValue.Location = Point(80, 130);
lblValue.Name = "lblValue";
lblValue.Size = Size(70, 10);
lblValue.TabIndex = 9;
--lblValue.Text = "";
 
btnVote.Location = Point(70, 170);
btnVote.Name = "btnVote";
btnVote.TabIndex = 10;
btnVote.Text = "开始投票";
btnVote.Click:Add(btnVote_click);
 
form.AutoScaleBaseSize = Size(5, 13);
form.ClientSize = Size(200, 200);
form.Controls:Add(lblVoteCount);
form.Controls:Add(txtVoteCount);
form.Controls:Add(lblConnectionName);
form.Controls:Add(txtConnectionName);
form.Controls:Add(lblConnectionUser);
form.Controls:Add(txtConnectionUser);
form.Controls:Add(lblConnectionPassword);
form.Controls:Add(txtConnectionPassword);
form.Controls:Add(lblPercent);
form.Controls:Add(lblValue);
form.Controls:Add(btnVote);
form.Name = "MainForm"
form.Text = "ICCTV Vote"
form.StartPosition = FormStartPosition.CenterScreen
form.MaximizeBox=false;
form.MinimizeBox=true;
form:ResumeLayout(false);
form:ShowDialog();]]>
 </脚本区块>
 <数据区块>
  <验证码样本>
   <item key="0" value="R0lGODlhCQAKAOMAAP///wAAAMjIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAAJAAoAAAQWEMhApaX4Bj1tB5sXhtdEViZImqjnRgA7" ktype="string" vtype="string" />
   <item key="1" value="R0lGODlhCQAKAOMAAP///wAAAMjIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAAJAAoAAAQTEMgQpAW0Xpz31BsYehOJkZ1pRQA7" ktype="string" vtype="string" />
   <item key="2" value="R0lGODlhCQAKAOMAAP///wAAAMjIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAAJAAoAAAQXEIAQZrXXTsl3l9SnfWFHZVyZnuTpBhEAOw==" ktype="string" vtype="string" />
   <item key="3" value="R0lGODlhCQAKAOMAAP///wAAAMjIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAAJAAoAAAQUEIRJgb124qt3x9WWBWJWdihZXhEAOw==" ktype="string" vtype="string" />
   <item key="4" value="R0lGODlhCQAKAOMAAP///wAAAMjIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAAJAAoAAAQWEEgZwpzV3qyp7hWGfSFQZpeYUmsaAQA7" ktype="string" vtype="string" />
   <item key="5" value="R0lGODlhCQAKAOMAAP///wAAAMjIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAAJAAoAAAQVEIQAqpX30lxn35zHYeMmSqB3jkAEADs=" ktype="string" vtype="string" />
   <item key="6" value="R0lGODlhCQAKAOMAAP///wAAAMjIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAAJAAoAAAQWEIAQZpVUTn01915mcZ3YjWiaiaAXAQA7" ktype="string" vtype="string" />
   <item key="7" value="R0lGODlhCQAKAOMAAP///wAAAMjIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAAJAAoAAAQUMIA5g6T4YmA311S3iRn4mZ93ehEAOw==" ktype="string" vtype="string" />
   <item key="8" value="R0lGODlhCQAKAOMAAP///wAAAMjIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAAJAAoAAAQVEIAQZpVUWnw391/2jR02gpmorVIEADs=" ktype="string" vtype="string" />
   <item key="9" value="R0lGODlhCQAKAOMAAP///wAAAMjIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAAJAAoAAAQWEIAQZpVUWnwx19m3aWRHTiDYUezpRgA7" ktype="string" vtype="string" />
  </验证码样本>
 </数据区块>
</ApeML>

注意:需要dotnet1.1支持.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值