【高级进阶】自行开发屏蔽验证码识别插件介绍

热度 2,519 | 2017-06-14 09:56:00

By | 2017年6月14日

为了便于用于开发自己的验证码识别,我们开放了相关插件接口,便于用户自行开发识别验证码的插件,识别后将识别结果返回,采集器会提交该验证码识别结果并达到解除屏蔽的目的。(本教程适用于有开发能力的用户,若您是一般用户,请参看https://blog.cxsup.com/archives/150

未来还将提供更多接口供用户自行开发拓展,本节介绍开发验证码识别插件的技术介绍。

提示:若采集过于频繁快速(例如多线程、多进程采集或采集速度频繁),即使输入验证码有时候也会被亚马逊强制跳转到400、500错误页,请注意!

本插件开发VC6源码示例和调试器开发包下载地址:http://pan.baidu.com/s/1jHNji54

开发包包含了 调试器、VC++6.0示例源码、匹配可用的CxPlugCrackAmRobot.exe程序文件,如果您的采集器为最新版本,请无视CxPlugCrackAmRobot.exe文件。

原理介绍:被采集屏蔽弹出验证码,程序会运行验证码输入程序CxPlugCrackAmRobot.exe文件(20177784以上版本),该程序用于处理验证码输入,同时该程序也用于调用您的DLL文件,因此不是采集器调用你的DLL,而是CxPlugCrackAmRobot.exe文件调用你的DLL,CxPlugCrackAmRobot.exe会调用CxPlugRobotVerDis.dll文件中的相关函数,并等待函数CxPlugRobotVerDis返回识别结果,并提交继续采集。

使用前请利用我们提供的调试器进行调试,调试可用后方可使用。

 

1.支持的插件形式为DLL文件,请开发DLL程序文件。开发后的DLL插件文件,请保存在:

程序数据目录\plug\CxPlugRobotVerDis.dll

(程序数据目录可在采集器系统设置中,找到数据存储位置,点定位按钮即可定位查看)

 

2.该DLL文件仅需要公开三个如下函数即可:


接口函数名称:CxPlugRobotVerDis (如果你的DLL是stdcall模式的,请函数名称写为CxPlugRobotVerDis_s)

说明:该函数用于识别图片后返回结果文本交由采集器提交处理

参数:

【pic_location 】文本型;该参数回传验证码图片保存在本地的位置。当然图片位置一般保存在程序数据目录\plug\ver.jpg  该文件即为本次屏蔽出现的验证码。因此也可以无视本参数,但必须声明存在,否则会导致调用栈错误。

【RobotHmtl 】文本型;返回屏蔽页面的HTML源码文本(编码为ANSI)

返回值:文本型;请返回验证码识别结果文本,例如识别验证码后结果为:RTKYBM,如果返回空文本,则不输入验证码结果等待用户自行输入


接口函数名称:CxPlugRobotVerDisError(如果你的DLL是stdcall模式的,请函数名称写为CxPlugRobotVerDisError_s)

说明:若提交返回结果后失败,则调用本函数,一般用于失败报错等情况,同时请用户自行处理失败重试次数限制等情况,避免循环识别错误,并且没有正常解除屏蔽导致您损失相应题分(验证码识别费用)

参数:

返回值:整数型;返回1代表重新获取验证码并继续调用CxPlugRobotVerDis重新识别。返回其他数字则不重新获取验证码,跳过本次验证码识别


接口函数名称:CxPlugRobotVerDisSuccess(如果你的DLL是stdcall模式的,请函数名称写为CxPlugRobotVerDisSuccess_s)

说明:识别成功并成功获取数据采集器才会后调用本函数,用于通知本次识别成功

参数:

返回值:无


3.以上三个函数必须公开,且名称必须对应后方可使用,否则会报错导致程序崩溃

 

以上对于stdcall 和 cdecl方式调用的支持限20177786以上版本或者采集器验证码输入插件(CxPlugCrackAmRobot.exe)为最新版本V1.2以上即可(CxPlugCrackAmRobot.exe文件已包含在开发包里,可复制覆盖采集器目录下的CxPlugCrackAmRobot.exe文件)。

20177786版本以前或CxPlugCrackAmRobot.exe文件1.2以前的版本,均默认插件使用cdecl模式调用;

只有采集器20177786或CxPlugCrackAmRobot.exe文件1.2以后的版本才支持stdcall或cdecl模式。采用stdcall模式的DLL务必在函数名称后面加上_s 后缀,否则仍然按照cdecl模式调用。(如果一个DLL里包含了带_s后缀和不带_s后缀的函数名称,则优先调用不带_s的函数)

问题警告:请用户自行在插件中判断验证是否成功,并防止单次识别错误次数过多而消耗过多验证码识别积分(题分)。

本功能对多线程采集兼容不佳,容易多次提示验证码输入,可能会导致消耗过多题分,建议多开软件多进程采集。

发表回复