通过JavaScript脚本实现验证码自动输入

  很多网站在用户进行某次点击,比如在线购物确认购买时,会要求用户输入验证码,这在一般情况下也没啥问题,但在用户需要频繁购买或是抢购时就很讨厌了。其实网站的验证码一般是由JS脚本生成的,因此也可以通过编写自己的JS脚本来实现验证码自动输入。

  大致原理如下,首先观察原网页弹出的验证码图片,这里给出两个示例:,它们都是前景黑白,背景彩色,宽100高20的图片,进一步把图片放到PS里打开可以发现每个数字所占的都是一个宽8高10的矩形,且这5个矩形的位置和相对距离都是固定的。因此,原理就很简单了,事先为每个数字和字母做一个唯一的编码表,每个码都是长为80维的0-1编码,0代表当前数字(字母)在这个小矩形里是背景,1则代表是前景,这样所有数字和字母都有自己唯一的编码。每次随机生成一幅新的验证码图后,只要把这5个数字(字母)对应的小矩形取出来,然后依次遍历那80个像素,得到一个长为80的编码,再去与编码表一一匹配,就知道具体是哪个数字(字母)了。代码如下:

 1 var captcha = ‘‘; /* 验证码 */
 2 var canvas = document.createElement(‘canvas‘);
 3 canvas.width = ‘100‘; /* 验证码图片宽度 */
 4 canvas.height = ‘20‘; /* 验证码图片高度 */
 5 canvas.style.display = ‘none‘;
 6 document.body.appendChild(canvas); /* 将这一部分也加入到网页代码中 */
 7 var context = canvas.getContext(‘2d‘);
 8 var image = new Image();
 9 image.src = document.getElementById(‘coderefresh‘).src;
10 image.onload = function() {
11     context.drawImage(image, 0, 0);
12     for (var i = 0; i < 5; i++) { /* 5位验证码,依次处理 */
13         var dbString = ‘‘;
14         var canvasData = context.getImageData(27 + 9 * i, 5, 8, 10); /* 上面的例子第一个小矩形左上角的坐标是(27,5),然后依次偏移9就是下一个小矩形 */
15         for (var j = 0; j < canvasData.data.length; j += 4) {
16             var r = canvasData.data[j + 0];
17             var g = canvasData.data[j + 1];
18             var b = canvasData.data[j + 2];
19             /* 验证码字符只有黑白两种纯色, 背景色均为其它RGB值 */
20             if (!((r == 0 && g == 0 && b == 0) || (r == 255 && g == 255 && b == 255)))
21                 dbString += ‘0‘;
22             else
23                 dbString += ‘1‘;
24         }
25         for (var k = 0; k < 36; k++) { /* 去编码表进行匹配 */
26             if (dbString == characters[0][k]) /* 匹配成功 */
27                 break;
28         }
29         captcha += characters[1][k];
30     }
31     /* 加入购物车 */
32     var reslut_list = new Array();
33     reslut_list.push(window.location.pathname.match(/\d+/)[0]);
34     reslut_list.push(captcha);
35     addToCart(reslut_list);
36 }
时间: 2024-08-23 17:10:17

通过JavaScript脚本实现验证码自动输入的相关文章

javascript脚本实现浏览器自动点击(阿里员工秒杀月饼)

原文地址https://blog.csdn.net/ani521smile/article/details/52575063 秒杀活动页面 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title> Micomo </title> </h

shell写自动安装脚本自动读取license和自动输入回车

最近比较闲,在公司写了一个centreon+nagios平台源码全自动安装脚本(因为公司不能连外网,公司yum源很多东西不全,所以只能采取源码安装),其中写到安装centreon时候,执行./install -i 会需要回车读取license,而需要阅读内容比较多,需要多次按下空格键才能读完,以下使用expect来实现此部分,如果各位有比较好的方法,麻烦指点,相互学习,因为脚本已经使用,所以不便公开,这里就简单举个例子,之后应该会用python写一些开源的东西,也请大家多多指点. 1.安装exp

JavaScript强化教程 —— Cocos2d-JS自动JSB绑定规则修改

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程 —— Cocos2d-JS自动JSB绑定规则修改 什么是JSB JSB是javascript binding的简称.Cocos2d-JS中使用的javascript引擎是Mozilla 的spidermonkey,而JSB绑定的目的就是让javascript脚本能够调用到c++代码,c++代码能够调用到javascript脚本. 怎么生成JSB绑定 1.自动生成脚本 在Cocosd-JS引擎目录下的t

C#中让WebBrowser运行Javascript脚本

C#中可以让Webbrowser运行Javascript脚本来实现各种自动化操作,比如点击网页上的按钮,输入用户名密码等等.代码也很简单: >>>>>>>>>>>>>>>>>>>>方法一:只需要先获取HtmlElement,然后对获取的element进行操作即可,比如: HtmlElement btn = webBrowser1.Document.GetElementById(“aBtn

探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密

原文:探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密 下面的图片是我使用firefox和chrome浏览百度首页时候记录的http请求 下面是firefox: 下面是chrome: 在浏览百度首页前我都将浏览器的缓存全部清理掉,让这个场景最接近第一次访问百度首页的情景. 在firefox的请求瀑布图里有个表现非常之明显:就是javascript文件下载完毕后,有一段时间是没有网络请求被处理的,这段时间过后http请求才会接着执行,这段空闲时间就是所谓的http请求被阻塞

注册表禁用Adobe软件的JavaScript脚本运行

参考:https://www.adobe.com/devnet-docs/acrobatetk/tools/AppSec/javascript.html Adobe软件的漏洞越来越多,如果新版本发布,我们不想或者限于条件无法更新,为了安全,我们可以关闭AdobeReader的JavaScript功能. 1.手动关闭JavaScript功能方法: 打开AdobeReader软件,在"编辑>>首选项"中,定位到"JavaScript",勾选掉右边的"

jQuery completer 自动输入提示

html代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="

jQuery/javascript实现IP/Mask自动联想功能

之前做一个云计算的项目,涉及到一个安全组自动联想的功能,思想是这样的: 安全组规则之间是可以相互引用的,也可以自己是自己手动输入的ip/mask,这时候可以加一个功能,实现securityGroupId和securityGroupName以及ip/mask之间随意的联想输入. 主要实现方式是:后台处理securityGroupName和SecurityGroupName的组合列表,并且在前台做相应的处理,处理为数组对象,此时对名称和id的联想基本实现,如果再加上ip/task,只需做一些处理,创

ExtJs4.2 登陆界面(点击验证码自动刷新,label实现click事件)

ExtJs4.2 登陆界面(点击验证码自动刷新,label实现click事件) 转载请注明:http://blog.csdn.net/qiuzhping/article/details/42596339 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <%@ page langu