kissanime Anime Captcha Solver

This script ask user for help for first time and save the response and use that to solve future captcha.

  1. // ==UserScript==
  2. // @name kissanime Anime Captcha Solver
  3. // @version 2018.05.02
  4. // @namespace https://greasyfork.org/en/users/188118-ankit16-19
  5. // @author ankit16-19
  6. // @description This script ask user for help for first time and save the response and use that to solve future captcha.
  7. // @grant none
  8. // @include http://kissanime.ru/Special/AreYouHuman2*
  9. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
  10. // ==/UserScript==
  11. //custom html
  12. $("#formVerify").append("<br>")
  13. var input=document.createElement("input");
  14. input.id = "image1"
  15. input.type="button";
  16. input.value="Image1";
  17. input.onclick = function(){
  18. if(!localStorage.getItem("helpword")){
  19. localStorage.setItem(localStorage.getItem("helpWord"),ProcessImages()[0])
  20. localStorage.removeItem("helpword");
  21. }
  22. if(unknownwords[1] !== undefined && count < 1){
  23. askForHelp(unknownwords[1]);
  24. count++;
  25. }
  26. $("[indexValue=0]").click();
  27. }
  28. input.setAttribute("style", "font-size:18px;");
  29. document.getElementById("formVerify").appendChild(input);
  30. var input=document.createElement("input");
  31. input.id = "image2"
  32. input.type="button";
  33. input.value="Image2";
  34. input.onclick = function(){
  35. if(!localStorage.getItem("helpword")){
  36. localStorage.setItem(localStorage.getItem("helpWord"),ProcessImages()[1])
  37. localStorage.removeItem("helpword");
  38. }
  39. if(unknownwords[1] !== undefined && count < 1){
  40. askForHelp(unknownwords[1]);
  41. count++;
  42. }
  43. $("[indexValue=1]").click();
  44. }
  45. input.setAttribute("style", "font-size:18px;");
  46. document.getElementById("formVerify").appendChild(input);
  47. var input=document.createElement("input");
  48. input.id = "image3"
  49. input.type="button";
  50. input.value="Image3";
  51. input.onclick = function(){
  52. if(!localStorage.getItem("helpword")){
  53. localStorage.setItem(localStorage.getItem("helpWord"),ProcessImages()[2])
  54. localStorage.removeItem("helpword");
  55. }
  56. if(unknownwords[1] !== undefined && count < 1){
  57. askForHelp(unknownwords[1]);
  58. count++;
  59. }
  60. $("[indexValue=2]").click();
  61. }
  62. input.setAttribute("style", "font-size:18px;");
  63. document.getElementById("formVerify").appendChild(input);
  64. var input=document.createElement("input");
  65. input.id = "image4"
  66. input.type="button";
  67. input.value="Image4";
  68. input.onclick = function(){
  69. if(!localStorage.getItem("helpword")){
  70. localStorage.setItem(localStorage.getItem("helpWord"),ProcessImages()[3])
  71. localStorage.removeItem("helpword");
  72. }
  73. if(unknownwords[1] !== undefined && count < 1){
  74. askForHelp(unknownwords[1]);
  75. count++;
  76. }
  77. $("[indexValue=3]").click();
  78. }
  79. input.setAttribute("style", "font-size:18px;");
  80. document.getElementById("formVerify").appendChild(input);
  81.  
  82.  
  83. //global variables
  84. var words = [];
  85. var undefinedWords = [];
  86. var imageSrc = [];
  87. var clickImage = [];
  88. var count = 0;
  89.  
  90. //Avoid conflicts
  91. this.$ = this.jQuery = jQuery.noConflict(true);
  92. $(document).ready(function()
  93. {
  94. unknownwords = UnknownWords();
  95. knownwords = KnownWords();
  96. console.log("Unknown words " + unknownwords);
  97. console.log("Known words " + knownwords);
  98. // ask user for help with first word
  99. if(unknownwords[0] !== undefined){
  100. askForHelp(unknownwords[0]);
  101. }
  102. knownwords.forEach(function(word){
  103. matchfound = 0;
  104. console.log("processing known word:" + word)
  105. // get value from storage and click the corresponsding image;
  106. ProcessImages().forEach(function(image,counter){
  107. console.log("counter: " + counter);
  108. if(localStorage.getItem(word) == image){
  109. console.log("found match for word " + word);
  110. matchfound = 1;
  111. $("[indexValue='"+counter+"']").click();
  112. }else if(counter === 3 && matchfound === 0){
  113. location.reload();
  114. }
  115. })
  116. })
  117.  
  118. });
  119.  
  120. function askForHelp(word){
  121. alert("We need help for the word:" + word);
  122. localStorage.setItem("helpWord",word);
  123. }
  124.  
  125. function UnknownWords(){
  126. var unknownwords = [];
  127. Words().forEach(function(word){
  128. if(!localStorage.getItem(word)){
  129. unknownwords.push(word);
  130. }
  131. });
  132. return unknownwords;
  133. }
  134. function KnownWords(){
  135. var Knownwords = [];
  136. Words().forEach(function(word){
  137. if(localStorage.getItem(word)){
  138. Knownwords.push(word);
  139. }
  140. });
  141. return Knownwords;
  142. }
  143.  
  144. function SaveWord(word, dataurl){
  145. if(!localStorage.getItem(word)){
  146. localStorage.removeItem(word);
  147. localStorage.setItem(word, dataurl);
  148. }else {
  149. localStorage.setItem(word,dataurl);
  150. }
  151. }
  152.  
  153. function Words(){
  154. var words = $("#formVerify").find("span").toArray();
  155. var First = words[0].innerText;
  156. var Second = words[1].innerText;
  157. return [First, Second];
  158. }
  159.  
  160. function Images(){
  161. return $("[indexValue]").toArray();
  162. }
  163.  
  164. function ConvertToDataUrl(img) {
  165. var canvas = document.createElement("canvas");
  166. canvas.width = img.width;
  167. canvas.height = img.height;
  168. var ctx = canvas.getContext("2d");
  169. ctx.drawImage(img, 0, 0);
  170. var dataURL = canvas.toDataURL("image/png");
  171. return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
  172. }
  173.  
  174. function MinimiseDataUrl(dataUrl,jump)
  175. {
  176. var a = "";
  177. for(var i = 0; i < dataUrl.length; i=i+jump)
  178. a += dataUrl.charAt(i);
  179. return a;
  180. }
  181.  
  182. function ProcessImages()
  183. {
  184. var imagedata = [];
  185. Images().forEach(function(image, counter)
  186. {
  187. dataurl = ConvertToDataUrl(image)
  188. imagedata.push(MinimiseDataUrl(MinimiseDataUrl(MinimiseDataUrl(dataurl, 5), 4),3));
  189. })
  190. return imagedata
  191. }
  192.