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

该博客主要围绕投票系统展开,包含创建投票表单界面,实现验证码识别、网络连接检测、拨号连接等功能。代码中定义了多个函数,如识别验证码、判断网络连接状态、执行拨号操作等,还设置了投票次数和进度显示,需 dotnet1.1 支持。

<?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支持.

模拟精灵是一款小巧的迷你开发工具。不会编程您也可轻松制作软件、释放双手让鼠标键盘自动工作。模拟精灵2005 将会带给您前所未有、激动人心的全新体验. 这也是一款全免费的纯绿色软件,可以永久无限制的使用。无需安装注册就可随地运行,已内置了web窗体界面编程、windows编程、模拟编程、XML序列化、网络服务、zip压缩、图象处理...... 等等所有最新最强劲的功能,同时支持各种插件、.Net、ActiveX、vbs、js、DLL动态链接库、COM组件、WinAPI 小小体积但几乎可以帮助你完成所有的常用电脑操作. 模拟精灵推出了一种全新的模拟编程技术,即由编软件到编控制软件的软件。从使用软件到使用代码,让编程不再是程序员的专利、普通用户同样触手可及。一句代码下载网页,一句代码自动发贴,一句代码批量处理文件,一句代码完成工作。小到桌面自动化,大到价值数千的大型群发软件。大量的成功案例无不体现出模拟精灵卓越的创造能力。 第一天玩玩模拟精灵 ----- 莫名其妙,好难啊!第二天了解模拟精灵 ----- 惊喜激动,好玄啊!第三天精通模拟精灵 ----- 如获至宝,好爽啊! 一、软件功能: 1、轻松录制鼠标键盘动作、可自由编辑、自动帮助你完成一系列指定的工作。。 2、强大的web编程功能,轻松制作自动发贴软件,并首个公开强大有效的验证码识别技术。 3、可自动拔号、自动更换代理、自动聊天、轻松制作各种群发软件。 4、轻松创建功能强大游戏脚本、较同类软件节省80%时间。 5、自动安装与使用程序、远程协助、制作演示教程。 6、把一组自动化操作绑定一个热键、扩展键盘功能。 7、可创建计划任务定,可设定定时自动运行,自动录制、自动创建分卷文件。 8、可监测纪录输入的中英文字符串、按钮标题、窗体标题.监测控制运行的进程。 9、通过web窗体实现GUI界面、神奇新颍的编程开发工具。 二、软件特色: 1、可选四种完全不同的鼠标键盘录制模式、五种录制方案、录制鼠标键盘操作 2、可选四种不同的鼠标键盘回放模式,可选普通模拟、软件模拟、仿真模拟、硬件模拟。一键切换。 3、完全自动生成强大抓点、抓色块、抓图功能,无需编代码,一键完成强大的智能判断功能。 4、通过编网页即可设计漂亮的软件界面,不会编程也能做软件。 5、支持所有高级语言特性,如变量、延时、循环、结合标记语言与动态语言的优点 6、支持可定制多国语言包、自动互译、您也可以定制一套您自已的ApeML语言. 7、ApeML能携带图片附件,也可导入导出图片,可选三种抓屏方式,可调用外部抓屏软件... 8、自动发送中英文字符串到软件、游戏、网页...支持win9x、XP、2000、2003.. 9、支持XML序列化、网络服务、zip压缩、图象处理、窗体控制、内存读...... 10、代码编辑支持自动完成列表与模板的代码编辑器 并提供大量视频教程、文字教程、免费技术支持论坛有问必答、及时解决您使用中遇到的疑难问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值