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

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

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

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

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

    原文地址https://blog.csdn.net/ani521smile/article/details/52575063 秒杀活动页面 <!DOCTYPE HTML> <html ...

  2. JavaScript脚本语言基础(一)

    导读: JavaScript代码嵌入HTML文档 JavaScript代码运行方式 第一个实例 JavaScript的三种对话框 定义JavaScript变量 JavaScript运算符和操作符 Ja ...

  3. C#中让WebBrowser运行Javascript脚本

    C#中可以让Webbrowser运行Javascript脚本来实现各种自动化操作,比如点击网页上的按钮,输入用户名密码等等.代码也很简单: >>>>>>>&g ...

  4. 2017.9.22 HTML学习总结--JavaScript脚本语言

    接上: 1.JavaScript脚本语言 定义:javascript是一种简单的脚本语言,可以在浏览器中直接运行, 是一种在浏览器端实现网页与客户交互的技术javascript代码可 以直接运行在ht ...

  5. 【按键精灵篇】如何做一个自动打开APP进入注册页面自动输入自己手机号

    按键精灵,虽然很早听过,但是一直没有真正使用过,所以最近有点时间也简单试一下,通过脚本自动清理APP缓存,打开百家号并自动进入注册页面输入自己的手机号. 软件清单 1. 雷电手机模拟器:https:/ ...

  6. MongoDB学习笔记-06 数据库命令、固定集合、GridFS、javascript脚本

    介绍MongoDB支持的一些高级功能: 数据库命令 固定大小的集合 GridFS存储大文件 MongoDB对服务端JavaScript的支持 数据库命令 命令的原理 MongoDB中的命令其实是作为一 ...

  7. JavaScript脚本语言基础(四)

    导读: JavaScript和DOM DOM文档对象常用方法和属性 DOW文档对象运用 JSON数据交换格式 正则表达式 1.JavaScript和DOM [返回] 文档对象模型(Document O ...

  8. Ajax实现提交表单时验证码自动验证(原创自Zjmainstay)

    本文通过源码展示如何实现表单提交前,验证码先检测正确性,不正确则不提交表单,更新验证码. 1.前端代码 index.html <!DOCTYPE html> <html> &l ...

  9. JavaScript脚本语言基础(三)

    导读: 数学对象(Math) 数组对象(Array) 字符串对象(String) 日期对象(Date) js对象是属性和方法的集合.JavaScript中的所有事物都是对象,如:字符串.数值.数组.函 ...

随机推荐

  1. OpenLDAP与phpldapadmin的搭建

    最近一直在看LDAP的东西,把自己的记录下来,以后可以看看. 1:环境 1):关闭防火墙 service iptables stop 2):setenforce 0 vim /etc/sysconfi ...

  2. [原创]PCB知识补充

    近期又要使用Altium进行PCB板的绘制,算起来从大学课上第一次接触Protel99SE到现在已经算是半个熟练工了.不过现在想来还是能回忆起第一次使用的情景,对着一幅简单的原理图使用着自动连线的功能 ...

  3. Ubuntu 14.04下搭建Python3.4 + PyQt5.3.2 + Eric6.0开发平台

    引言 找了很多Python GUI工具集,还是觉得PyQt比较理想,功能强大跨平台,还支持界面设计器.花一天时间折腾了Ubuntu14.04(32位)+ Python3.4 + Qt5.3.2 + P ...

  4. Bridging signals hdu 1950 (最长上升子序列)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=1950 题意:求最长上升(不连续or连续)子序列 推荐博客链接: http://blog.csdn.n ...

  5. CK13物料价格评估的数据ALV显示

    *&---------------------------------------------------------------------* *& Report  ZPP023 * ...

  6. 管理表空间和数据文件<六>

    数据库管理 -- 管理表空间和数据文件  介绍 表空间是数据库的逻辑组成部分.从物理上讲,数据库数据存放在数据文件中:从逻辑上讲,数据库则是存放在表空间中,表 空间由一个或多个数据文件组成. 数据库 ...

  7. [php-src]窥探Php内核中的变量

    内容均以php-5.6.14为例. 在看各种组合数据类型之前,有必要先熟悉下 Zend/zend_types.h 里面的自定义数据类型. #ifndef ZEND_TYPES_H // 防止多次 in ...

  8. NET Framework 4.0的安装失败处理

    如果是XP系统,这么做:1.开始——运行——输入cmd——回车——在打开的窗口中输入net stop WuAuServ2.开始——运行——输入%windir%3.在打开的窗口中有个文件夹叫Softwa ...

  9. NSA,放开那头魔兽!

    面对NSA的觊觎,玩<魔兽世界>的男生们现在恐怕要护好自己的菊花了.   据新浪科技报道,亡命天涯的斯诺登还在持续爆料,最近的爆料和游戏有关:   NSA和英国政府通信总署(简称“GCHQ ...

  10. 【转】Linux下查看文件和文件夹大小

    当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力.    du可以查看文件及文件夹的大小. ...