- 小学一年级
- 3010342
- 2120
- 0
- 359 朵
- 8864 个
- 390 个
- 54940
- 2015-01-15
|
1#
t
T
发表于 2015-07-27 15:32
|
|只看楼主
本帖最后由 66球 于 2015-7-27 16:22 编辑 轻松学会wqm自动注册论坛账号 本文由按键学院提供技术支持 按键学院交流群(1群已满):376122403 零基础学按键精灵群(2群):372671254 按键学院交流③群(3群):170084238 前俩期跟大家分别分享了关于wqm获取网页元素特征码的技巧和uu云远程打码平台的使用接入方法,这次小编把它们结合在一起,花了点时间用wqm写了一个简单、易懂的discuz论坛自动注册账号的小脚本分享给大家,有兴趣了解wqm写类似功能的童鞋不妨一看 | 填入注册信息时用到的元素特征码都是基于wqm分析组合出来的,不了解的童鞋建议先看看:【院刊】-【201507期】不要在一个元素特征字符串上吊死
- 您所在的用户组无法下载或查看附件
从它的注册页面上大概可以看出它是这么个流程 - 您所在的用户组无法下载或查看附件
技术小难点: 1.验证问答那边给出的数字并不是纯色的,是渐变色的,如何才能正确识别验证问答的算术表达式 2.验证码的出现受网络的影响,并不是实时出现的,有时还直接出不来,会显示红"X",怎么能判断验证码是否正常出现再截图上传到远程答题平台进行自动打码
- 您所在的用户组无法下载或查看附件
游戏中的验证问答的数字是这样的,不容易直接用大漠提取文字本身做字库,但是背景色都是白色,所以小编原先是想通过大漠的ocr背景色识别来识别这些数字,但是发现效果不是很理想,主要是"-"号非常容易被识别错误,然后小编又想通过网页源文件配合正则来匹配出表达式,但是源文件好像没有这个表达式,最后偶然发现原来用wqm特征元素分析可以直接分析出整个的文本内容,所以利用web网页插件里的HtmlGet命令获取文本内容后直接替换就可以得到其表达式,再用eval函数即可返回其结果 相关代码如下 - Function 验证问答
- 内容= Plugin.Web.HtmlGet("text","tag:TD&index:21") //获取对应特征元素的文本信息
- TracePrint 内容
- 内容 = replace(内容, "换一个", "")
- 表达式 = replace(内容, "= ?", "")//得到算术表达式
- TracePrint 表达式
- 结果 = eval(表达式)//eval函数返回计算结果
- TracePrint 结果
- 验证问答=结果
- End Function
复制代码[tr=rgb(154,205,50)]判断验证码是否出现 | 细心的童鞋应该不难发现,验证码没出现区域范围内都是白色,验证码出现后,范围内的背景色就会变成其他颜色,所以小编这边用的是web网页插件里的gethwnd命令先获取页面句柄,然后配合后台定点取色命令判断验证码是否出现,相关代码 - Function 验证码截图
- 页面句柄 = Plugin.Web.GetHwnd()
- TracePrint 页面句柄
- Do
- 定点颜色 = Plugin.Bkgnd.GetPixelColor(页面句柄, 258, 585)
- TracePrint 定点颜色
- If 定点颜色 <> "FFFFFF" and 定点颜色<>"C0C0C0" Then
- TracePrint "验证码出现,开始截图"
- //截图代码
- call UU云打码 (105615, "56f19e68e2334cd2a8f9efe7b5cdc17f", "dd8878dd", "15987530", 页面句柄,232,575,369,634,1004)
- Exit Function
- ElseIf 定点颜色 = "C0C0C0" Then
- TracePrint "识别到验证码异常,换一个"
- Call Plugin.Web.HtmlClick("tag:A&txt:换一个&index:1")
- Delay 500
- Call 验证码截图
- End If
- Delay 300
- Loop
- End Function
复制代码[tr=rgb(154,205,50)]接入UU云打码 | 小编这边用的是UU云答题插件通过页面句柄进行后台验证码区域范围内截图并上传自动进行打码,相关代码: - Call UU云打码 (105615, "56f19e68e2334cd2a8f9efe7b5cdc17f", "dd8878dd", "15987530", 页面句柄,232,575,369,634,1004)
- // uu云远程打码实现部分
- Function UU云打码(软件ID, 软件Key, 用户名, 密码, 页面句柄,左上X,左上Y,宽,高,类型编号)
- VCodeRet = Plugin.uu.easyRecognizeWndByHWndAndPos(软件ID, 软件Key, 用户名, 密码, 页面句柄, 左上X,左上Y,宽,高,类型编号, VCodeIdx)
- If VCodeIdx > 0 Then
- UU云打码 = Split(VCodeRet, "_")(1)
- TracePrint UU云打码
- Call Plugin.Web.HtmlInput(UU云打码,"TAG:INPUT&Name:seccodeverify")
- End If
- End Function
复制代码- Call 写入注册信息
- Function 写入注册信息
- PID=Plugin.Web.Bind("wqm.exe") '绑定wqm,使用wqm开头必用
- Call Plugin.Web.Go("http://www.discuz.net/member.php?mod=register")
- Call Plugin.Web.HtmlClick("tag:SPAN&txt:同意") '点击同意注册协议按钮
- Call Plugin.Web.HtmlInput (随机用户名, "id:username_Cakjsakd") '自动输入随机生成的用户名
- Call Plugin.Web.HtmlInput ("15987530aaa", "id:password_Aaskoq")
- Call Plugin.Web.HtmlInput ("15987530aaa", "id:password2_Caasd") '自动输入设置好的密码,密码可自定义
- Call Plugin.Web.HtmlInput (随机邮箱, "id:email_Vasdd") '自动输入随机生成的邮箱地址
- Call Plugin.Web.HtmlInput(验证问答, "TAG:INPUT&Name:secanswer") '自动输入验证问答结果
- Call 验证码截图
- Call Plugin.Web.HtmlClick("tag:STRONG&txt:提交") '点击提交按钮
- Delay 1000
- Call 判断是否注册成功并记录信息
- End Function
- Function 随机用户名
- For 10
- 随机用户名 = Lib.算法.随机取姓名()
- If instr(随机用户名, "夏") = 0 Then //系统屏蔽"夏"字
- 用户名 = 随机用户名
- traceprint 用户名
- Exit For
- End If
- Next
- End Function
- Function 随机邮箱
- For 10
- 十位数字 = Lib.算法.随机数字串(10)
- If left(十位数字, 1) <> 0 Then //判断第一位是否为0
- 随机邮箱 = cstr(十位数字) & "@qq.com"
- 邮箱=随机邮箱
- Exit For
- End If
- Delay 100
- Next
- TracePrint 邮箱
- End Function
- Function 验证问答
- 内容= Plugin.Web.HtmlGet("text","tag:TD&index:21") //获取对应验证问答特征元素的文本信息
- TracePrint 内容
- 内容 = replace(内容, "换一个", "")
- 表达式 = replace(内容, "= ?", "")//得到算术表达式
- TracePrint 表达式
- 结果 = eval(表达式)//eval函数返回计算结果
- TracePrint 结果
- 验证问答=结果
- End Function
- Function 验证码截图
- 页面句柄 = Plugin.Web.GetHwnd() '获取wqm当前页面句柄
- TracePrint 页面句柄
- Do
- 定点颜色 = Plugin.Bkgnd.GetPixelColor(页面句柄, 258, 585) '后台定点取色
- TracePrint 定点颜色
- If 定点颜色 <> "FFFFFF" and 定点颜色<>"C0C0C0" Then
- TracePrint "验证码出现,开始截图"
- //截图代码
- Call UU云打码 (105615, "56f19e68e2334cd2a8f9efe7b5cdc17f", "dd8878dd", "15987530", 页面句柄,232,575,369,634,1004)
- Exit Function
- ElseIf 定点颜色 = "C0C0C0" Then
- TracePrint "识别到验证码异常,换一个"
- Call Plugin.Web.HtmlClick("tag:A&txt:换一个&index:1")
- Delay 500
- Call 验证码截图
- End If
- Delay 300
- Loop
- End Function
- // uu云远程打码实现部分
- Function UU云打码(软件ID, 软件Key, 用户名, 密码, 页面句柄,左上X,左上Y,宽,高,类型编号)
- VCodeRet = Plugin.uu.easyRecognizeWndByHWndAndPos(软件ID, 软件Key, 用户名, 密码, 页面句柄, 左上X,左上Y,宽,高,类型编号, VCodeIdx)
- If VCodeIdx > 0 Then
- UU云打码 = Split(VCodeRet, "_")(1)
- TracePrint UU云打码
- Call Plugin.Web.HtmlInput(UU云打码,"TAG:INPUT&Name:seccodeverify")
- End If
- End Function
- Function 判断是否注册成功并记录信息 '记录注册成功的账号信息到日志
- t = now
- TracePrint "进入判断是否注册成功"
- Do
- 元素个数 = Plugin.Web.HtmlExists("tag:A&txt:退出") '判断页面是否有退出按钮,有则说明注册成功
- If 元素个数 > 0 Then
- 账号数量 = Plugin.File.ReadINI("注册成功的账号数量", "账号数量", "C:\账号记录.ini")
- TracePrint 账号数量
- If 账号数量 = "" Then
- 账号数量 = 1
- Else
- 账号数量 = clng(账号数量) + 1
- TracePrint 账号数量
- End If
- Call 输出日志( 账号数量,用户名,邮箱)
- Call Plugin.Web.Tips("注册成功,账号已记录,开始自动注册下一个")
- Call Plugin.Web.HtmlClick("tag:A&txt:退出")
- Call 写入注册信息
- ElseIf datediff("s", t, now) > 15 Then '15秒内页面没跳转则算注册超时失败,重新注册下一个,秒数可自定义
- Call Plugin.Web.Tips("该次注册超时,自动开始下一次注册")
- Call 写入注册信息
- End If
- Delay 200
- Loop
- End Function
- Sub 输出日志( 账号数量,用户名,邮箱)
- FileName = "C:\账号记录.ini"
- Call Plugin.File.WriteINI("注册成功的账号数量", "账号数量", 账号数量, FileName)
- Call Plugin.File.WriteINI("注册成功的账号", "用户名" & 账号数量, 用户名, FileName)
- Call Plugin.File.WriteINI("注册成功的账号", "注册邮箱"&账号数量, 邮箱, FileName)
- End Sub
复制代码今天关于使用wqm实现一个简单的自动论坛注册账号的功能就讲到这了,希望大家看后会觉得有用,其实现在的网站注册通常都需要输入手机号来验证了,这确实是一个比较头疼的问题,下期将分享下我们06天纵大大写的利用飞q手机验证码系统自动获取验证码的精美模板范例 相关院刊 【院刊】-【201507期】不要在一个元素特征字符串上吊死【院刊】-【201507期】此帖在手,打码不愁院刊总目录 showtopic.aspx?topicid=549014&forumpage=1&page=1
谢谢大家阅读,记得给小编送支花花 ! 顺手点个赞
|