Web Scraping - 获取由Javascript设置的CAPTCHA

时间:2015-01-03 11:25:16

标签: javascript web-scraping

这可能是一个微不足道的问题,如果是的话,对不起。但我试图寻找答案,但却无法得到令人信服的答案 我最近访问了一个需要登录的网站,看到它使用以下JS代码设置了CAPTCHA:

function Captcha(){
          var alpha = new Array('A','B','C','D',.....,'1',...,'9');
          var i;
          for (i=0;i<4;i++){
          var a = alpha[Math.floor(Math.random() * alpha.length)];
          var b = alpha[Math.floor(Math.random() * alpha.length)];
          var c = alpha[Math.floor(Math.random() * alpha.length)];
          var d = alpha[Math.floor(Math.random() * alpha.length)];
          var e = alpha[Math.floor(Math.random() * alpha.length)];
          var f = alpha[Math.floor(Math.random() * alpha.length)];
          var g = alpha[Math.floor(Math.random() * alpha.length)];
          }
          var code = a + '' + b + '' + '' + c + '' + d + '' + e;
          document.getElementById("mainCaptcha").value = code

}
在主体中有一个id为“mainCaptcha”的标签。

<input size="10" name="autocap" id="mainCaptcha" readonly="">

由于所有这些都发生在客户端,我认为应该可以通过脚本获取CAPTCHA值。如果可能的话,请建议一种方法。

3 个答案:

答案 0 :(得分:0)

您可以使用document.getElementById("mainCaptcha").value来检索CAPTCHA的值。这是实施CAPTCHA的一种非常不安全的方式。所以做正确的事情并通知网站所有者关于这个非常糟糕的CAPTCHA实施。

答案 1 :(得分:0)

这是使用Captcha最不安全的方法原因很简单,验证码用于添加额外的安全层。您可以使用黑客/刮刀无法直接获得的扭曲图像来保护您的网站。我建议继续使用最佳实践,在服务器上生成图像并转发给客户端或试用Google reCaptcha

或任何其他验证码生成工具

答案 2 :(得分:0)

  <html>
     <head>
         <script type="text/javascript">
             function Captcha(){
                 var alpha = new Array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
                 var i;
                 for (i=0;i<6;i++){
                   var a = alpha[Math.floor(Math.random() * alpha.length)];
                   var b = alpha[Math.floor(Math.random() * alpha.length)];
                   var c = alpha[Math.floor(Math.random() * alpha.length)];
                   var d = alpha[Math.floor(Math.random() * alpha.length)];
                   var e = alpha[Math.floor(Math.random() * alpha.length)];
                   var f = alpha[Math.floor(Math.random() * alpha.length)];
                   var g = alpha[Math.floor(Math.random() * alpha.length)];
                  }
                var code = a + ' ' + b + ' ' + ' ' + c + ' ' + d + ' ' + e + ' '+ f + ' ' + g;
                document.getElementById("mainCaptcha").value = code
              }
              function ValidCaptcha(){
                  var string1 = removeSpaces(document.getElementById('mainCaptcha').value);
                  var string2 = removeSpaces(document.getElementById('txtInput').value);
                  if (string1 == string2){
                    return true;
                  }
                  else{        
                    return false;
                  }
              }
              function removeSpaces(string){
                return string.split(' ').join('');
              }
         </script>    
    </head>
 <body onload="Captcha();">
    <table>
      <tr>
       <td>
             <h3>Text Captcha 'Yashpal Thakur'<h3><br />
       </td>
      </tr>
      <tr>
       <td>
         <input type="text" id="mainCaptcha"/>
          <input type="button" id="refresh" value=" Please Refresh" onclick="Captcha();" />
       </td>
      </tr>
      <tr>
       <td>
        <input type="text" id="txtInput"/>    
      </td>
     </tr>
     <tr>
      <td>
        <input id="Button1" type="button" value="Please Check" onclick="alert(ValidCaptcha());"/>
      </td>
    </tr>
  </table>
</body>