答应某人做个QQ空间自动灌水的脚本
基本上的功能都有了,可惜还是差了一点点,一直都没有拿出来。
QQ验证码的样本实在太多,该死的图片比较又不是很聪明,4个图片往往只能辨别出2,3个,甚至一个都认不出来。有空的时候自己去写个图片识别的来
不管怎样,还是先把这些脚本给整理出来了,期待有朝一日出来新的图片比较API,让该死的QQ验证码见鬼去吧
----------------------------------------------------获取图片-----------------------------------------------------------------------
getImg= function()
local ele=wb:getEle("temp");--这是模拟程序web界面上的一个节点,用来显示程序运行过程的相关信息
tab={wb:eleImages()}; --枚举web页所有图片
img=image.new();
for i,tele in ipairs(tab) do
if tele:id()=='idtimage' then --获取指定id的图片
tele:exec("Copy"); --拷贝
img:getClipBD() ;--从粘贴板获取
end
end;
img:Crop(1,2,37,18);--修剪图片。查看下载下来的图片,不断微调。 每个验证码图片这个参数可能不同。
img2,img3,img4,img5=img:split(1,4); --分割图片
img:paint(100,100,40,20); --屏幕显示图片
img2:paint(100,120,10,20);
img3:paint(120,120,10,20);
img4:paint(140,120,10,20);
img5:paint(160,120,10,20);
img:save("c:\\temp\\temp.png");--把图片保存到本地
ele:setAttribute("value","已从指定网址得到图像");--在web界面上显示提示信息。
ele:setAttribute("value","拆分并保存图像已经完成");--在web界面上显示提示信息
return img;
end;
------------------------------得到样本图片并保存在数据岛的函数------------------------------------------------------------------
sampleImg=function()
--遍历图片目录,读取样本图片
local tkey={};
win.enumProc = function(dir,filename)
if(not dir)then
tkey[string.sub(filename,9,10)]=string.sub(filename,9,14); --文件名形如c:\test\1a.jpg
end;
return nStop();
end;
win.enumDir("c:\\test\\","*.jpg") --显示该目录*.jpg文件
--k参数为键,v参数表示值 一个典型的tkeyle迭代器回调函数
loadtkey = function(k,v)
local img = image.new();
img:load("C:\\test\\"..k..".jpg");
assert(img:ok(),"C:\\test\\"..k..".jpg".."\n不是有效的图片");
img:bpp(1);
img:bpp(24);
--通过上面两句,轻松去掉验证码上的杂色杂点
img:Crop( 0 , 0 , 9 , 16);--修剪单个字符
img:median(2);--中值滤波进一步去杂点
tkey[k]= string.encode( img:getBytes("*.jpg") , "");
--因为转换到字符串还是二进制,所以用base64进行编码
image.del(img);
end;
--遍历表tkey的所有元素,调用loadtkey加载图片文件
for k,v in pairs(tkey) do
loadtkey(k,v);
end;
--把所有图片保存到数据岛,
ape:saveTable(tkey,"验证码样本")
end;
----------------------------------------------把界面写入web窗体的函数-------------------------------------------------------
write= function()
html = [[
<html>
<head>
<meta http-equiv="Content-Type" c>
<title>form</title>
</head>
<script> LAScript=external;;</script>
<body>
<form name="form1" method="post" action="">
<div id="userdata" style="display:none"></div><br><br>
<INPUT id="loadstring" type="button" value="从指定网址得到图像"><img id="idtimage" src="http://verify.qq.com/getimage?0.9075894487369346">
<br>
<br>
<INPUT id="loadstring" type="button" value="保存样本图片到数据岛">
<br>
<br>
<INPUT id="loadstring" type="button" value="开始校验图片">
<br>
<br>
这里显示程序运行过程相关信息:
<input id="temp" type="text" width="100">
</form>
</body>
</html>
]]
wb:go("about:blank");
delay(100)
wb:wait("about")
wb:write(html);
wb:setTitle(true);
wb:setScroll(true);
delay(1000)
wb:wait("")
wb:show(true);
end;
--------------------------------------------------------------------------------------------------------------------
local timg = {}; --这是一个图像数组,用来储存还原后的验证码样本的图片数据
--必须进行一个转换,因为codekey里面只是base64编码的普通字符串,而timg 将是真正的图片对象(二进制数据)
---------------------------------还原到图片对象--------------------------------------------------------------
toImage = function(k,v)
local img = image.new();
local str = string.decode( v ,"");--首先进行base64解码,将纯文本转换为二进制数据
img:setBytes( str ,"*.jpg");--将二进制数据还原为图像
timg[k] = img;
end;
---------------------------------转换图片验证码到字符串的函数-----------------------------------------
function ImgToString(img)
function test(imgX) --test是一个被包含在函数中的内部函数
sleep(0);
local limit = (60 * 20) + (60 * 20); --最小相似度 local关键字声明为局部变量
local chr = "A"; --读取的字符
--testimg是一个被包含在函数中的内部函数,作为table.foreach的回调函数,k参数表示键,v参数表示值
testimg = function(k,v)
--调用image.testXX()函数得出相似度,类似的函数还有image.testX() image.test()
local n = imgX:testXX(timg[k]); --就是这个“图片比较”太垃圾,不然就没有问题了,55555
if(n<limit)then --比较最小相似度
limit = n;
chr = k.."";
end;
end;
--遍历timg表,并调用testimg函数
for k,v in pairs(timg) do
testimg(k,v);
end;
return string.left(chr,1); --返回读取到的字符串首字符(如果每个字符有多个样本)
end;
--修剪图片
--image.Crop(img, 1 ,2 , 37 ,18 )
img:bpp(1);
img:bpp(24);
--上面的过程必须与下载样本时的代码完全一致。
--使用split函数分割图片
local img2,img3,img4,img5 = img:split(1,4);
win.messagePrint("正在检测图片,请稍候....");
return test(img2)..test(img3)..test(img4)..test(img5);
end;
-----------------------------------输出辨认结果-------------------------------------------
function showresult(str)
--下面我们把验证码的每个字符都转换为大写,并控制键盘顺序按键
code1 = string.upper( string.sub(str,1,1) );
code2 = string.upper( string.sub(str,2,2) );
code3 = string.upper( string.sub(str,3,3) );
code4 = string.upper( string.sub(str,4,4) );
win.consoleOpen()
print(code1);
print(code2);
print(code3);
print(code4);
end
-----------------------------------主调用-----------------------------------------------
wb=web.new();
write();--构建页面
sampleImg();--读取图片样本
tkey = ape:loadTable("验证码样本");
for k,v in pairs(tkey) do --验证样本
toImage(k,v); --转换为图像
end;
img = getImg();--读取图片
showresult(ImgToString(img));
分享到:
相关推荐
基于SSM的宾馆信息管理系统项目源码+数据库脚本-毕业设计基于SSM的宾馆信息管理系统项目源码+数据库脚本-毕业设计基于SSM的宾馆信息管理系统项目源码+数据库脚本-毕业设计基于SSM的宾馆信息管理系统项目源码+数据库...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
AE脚本-文字层代码高亮突出颜色控制FUI脚本AEscripts ASH Syntax Highlighter 1.0.0AE脚本-文字层代码高亮突出颜色控制FUI脚本AEscripts ASH Syntax Highlighter 1.0.0AE脚本-文字层代码高亮突出颜色控制FUI脚本...
脚本--windos 系统安全脚本--windos 系统安全脚本--windos 系统安全脚本--windos 系统安全脚本--windos 系统安全脚本--windos 系统安全
生成报告脚本-基于创建捕捉脚本
本文将详细探讨如何使用Python编写自动输入脚本来解决一些网站禁止用户通过粘贴方式输入数据的问题。Python作为一种强大的编程语言,提供了多种库和模块来实现这种功能,如`pyautogui`和`pynput`。 首先,我们需要...
基于SpringBoot+MySQL的在线考试系统源码+数据库脚本-毕业设计,本资源中的源码都是经过本地编译过可运行的,评审分达到98分,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、毕业设计、期末大...
SSH免密登录脚本,免密登陆环境脚本------ssh_no_pass.sh,centos7,ssh秘钥
oracle里,汉字变成拼音的脚本。----品质保证oracle里,汉字变成拼音的脚本。----品质保证oracle里,汉字变成拼音的脚本。----品质保证oracle里,汉字变成拼音的脚本。----品质保证oracle里,汉字变成拼音的脚本。--...
shell脚本--xnode.sh