Обсуждение скриптов и вопросов связанных с борьбой с капчами.
========================================================================
Начну пожалуй.
if(iimPlayCode('SET !TIMEOUT_STEP 0\nTAG POS=1 TYPE=script ATTR=src:*recaptcha*')>0){ f1='FRAME NAME=undefined\n'; iimPlayCode('SET !TIMEOUT_STEP 0\n'+f1+'TAG POS=1 TYPE=DIV ATTR=ROLE:presentation'); iimPlayCode('WAIT SECONDS=5'); iimPlayCode('SET !TIMEOUT_STEP 0\nTAG POS=1 TYPE=iframe ATTR=src:*recaptcha/api2/frame?c=* extract=htm'); f2='FRAME '+iimGetExtract().match(/name=".*?"/)+'\n'; iimPlayCode('ONDOWNLOAD FOLDER=C:\\CapNum\\ FILE=cap.jpg WAIT=YES\n'+f2+'TAG POS=1 TYPE=DIV ATTR=class:rc-imageselect-payload CONTENT=EVENT:SAVE_ELEMENT_SCREENSHOT'); }
Уменьшение картинки/капчи в размерах.
Тут есть много вариантов, приведу парочку.
Вариант 1
Использование сторонней программы.
Качаем convert.exe и распаковываем в папку куда сохраняются капчи (допустим C:\\CapNum\\).Вот этот код уменьшит и обрежет картинку/капчу cap.jpg в 2 раза (создаст рядом уменьшенную cap2.jpg)Выделить кодКод:
var Cc=Components.classes, Ci=Components.interfaces; var proc=Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); var file=Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); var args=['convert', 'C:\\CapNum\\cap.jpg', '-resize', '200x300', '-crop', '194x253+4+4', 'C:\\CapNum\\cap2.jpg']; file.initWithPath("C:\\CapNum\\convert.exe"); proc.init(file); proc.run(false, args, args.length);
Вариант 2
Использование PHP
Качаем вот это и распаковываем в папку C:\\CapNum\\.
Создаём файлик 1.php в папке куда сохраняются капчи C:\\CapNum\\.Скрипт 1.phpВыделить кодКод:
<?php $img=imagecreatefromjpeg("C:/CapNum/cap.jpg"); $des=imagecreatetruecolor(200,300); $col=imagecolorallocate($des, 0x00, 0x00, 0xFF); imagecopyresized($des, $img, 0, 0, 0, 0, 200, 300, 384, 510); imagestring($des, 5, 5, 70, "1", $col); imagestring($des, 5, 73, 70, "2", $col); imagestring($des, 5, 140, 70, "3", $col); imagestring($des, 5, 5, 148, "4", $col); imagestring($des, 5, 73, 148, "5", $col); imagestring($des, 5, 140, 148, "6", $col); imagestring($des, 5, 5, 225, "7", $col); imagestring($des, 5, 73, 225, "8", $col); imagestring($des, 5, 140, 225, "9", $col); imagejpeg($des, 'C:/CapNum/cap2.jpg'); imagedestroy($des); imagedestroy($img); ?>Вот этот код, для запуска 1.php, уменьшит картинку/капчу cap.jpg в 2 раза (создаст рядом уменьшенную cap2.jpg).
И так же пронумерует все варианты ответов (маленькие картинки) от 1 до 9 .Выделить кодКод:
var Cc=Components.classes, Ci=Components.interfaces; var proc=Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); var file=Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); var args=['C:\\CapNum\\1.php']; file.initWithPath('C:\\CapNum\\PHP\\PHP.exe'); // <--- Путь до PHP.exe proc.init(file); proc.run(false, args, args.length);
function resize(){ var Cc=Components.classes, Ci=Components.interfaces, c, Path='C:\\CapNum\\'; var proc=Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); var file=Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); var args=['convert', 'C:\\CapNum\\cap.jpg', '-resize', '200x300', '-crop', '194x253+4+4', 'C:\\CapNum\\cap2.jpg']; file.initWithPath(Path+"convert.exe"); proc.init(file); proc.run(false, args, args.length);} var key='тут ключик от рукапчи'; var bit='тут биткоин кошель'; f1='FRAME NAME=undefined\n'; if(iimPlayCode('SET !TIMEOUT_STEP 0\n'+f1+'TAG POS=2 TYPE=DIV ATTR=TXT:reCAPTCHA')>0){ iimPlayCode('SET !TIMEOUT_STEP 0\n'+f1+'TAG POS=1 TYPE=DIV ATTR=ROLE:presentation'); iimPlayCode('WAIT SECONDS=5'); iimPlayCode('SET !TIMEOUT_STEP 0\n'+f1+'TAG POS=1 TYPE=DIV ATTR=CLASS:*rc-anchor-checkbox-holder EXTRACT=HTM'); if(iimGetExtract().indexOf('checked="true')<0){ iimPlayCode('SET !TIMEOUT_STEP 0\nTAG POS=1 TYPE=iframe ATTR=src:*recaptcha/api2/frame?c=* extract=htm'); f2='FRAME '+iimGetExtract().match(/name=".*?"/)+'\n'; if(iimPlayCode('SET !TIMEOUT_STEP 0\n'+f2+'TAG POS=1 TYPE=DIV ATTR=CLASS:rc-imageselect-desc-wrapper')>0){ for(a=1; a<9; a++){ if(iimPlayCode('SET !TIMEOUT_STEP 0\n'+f2+'TAG POS=1 TYPE=DIV ATTR=CLASS:rc-image-tile-33')>0) break; else iimPlayCode('SET !TIMEOUT 30\n'+f2+'EVENT TYPE=CLICK SELECTOR="#recaptcha-reload-button" BUTTON=0');} iimPlayCode('ONDOWNLOAD FOLDER='+Path+' FILE=cap.jpg WAIT=YES\n'+f2+'TAG POS=1 TYPE=DIV ATTR=class:rc-imageselect-payload CONTENT=EVENT:SAVE_ELEMENT_SCREENSHOT'); iimPlayCode('WAIT SECONDS=2'); resize(); // <--- Уменьшаем картинку iimPlayCode('WAIT SECONDS=2'); iimPlayCode('TAB OPEN\nTAB T=2'); /*** -= Отправляем на распознавание =- ***/ for(sk=0; sk<=9; sk++){ iimPlayCode('SET !TIMEOUT 30\nURL GOTO=imacros2.rucaptcha.com/new/'); iimPlayCode('SET !TIMEOUT_STEP 0\nTAG POS=1 TYPE=INPUT:TEXT ATTR=NAME:key CONTENT='+key); iimPlayCode('SET !TIMEOUT_STEP 0\nTAG POS=1 TYPE=INPUT:FILE ATTR=TYPE:file CONTENT='+Path+'cap2.jpg'); iimPlayCode('SET !TIMEOUT 80\nTAG POS=1 TYPE=INPUT:SUBMIT FORM=ACTION:* ATTR=*'); iimPlayCode('SET !TIMEOUT_STEP 0\nTAG POS=1 TYPE=* ATTR=TXT:* EXTRACT=TXT'); if(iimGetExtract().search(/\d/)!=-1){ c=iimGetExtract().match(/\d+/g).join(''); iimDisplay(c); if(iimGetExtract().indexOf("ERROR")<0) break;}}} iimPlayCode('WAIT SECONDS=1\nTAB CLOSE'); if(Number(c)>0){ for(k=0; k<c.length; k++){ iimPlayCode('SET !TIMEOUT_STEP 0\n'+f2+'TAG POS='+c[k]+' TYPE=DIV ATTR=CLASS:rc-imageselect-checkbox');} iimPlayCode('SET !TIMEOUT 30\n'+f2+'EVENT TYPE=CLICK SELECTOR="HTML>BODY>DIV>DIV>DIV:nth-of-type(3)>DIV:nth-of-type(2)>DIV>DIV:nth-of-type(2)>DIV" BUTTON=0'); //<--- Код нажатия кнопки Продолжить, на некоторых сайтах может отличаться iimPlayCode('SET !TIMEOUT 30\n'+f2+'EVENT TYPE=CLICK SELECTOR="#recaptcha-verify-button" BUTTON=0'); iimPlayCode('WAIT SECONDS=2');}} iimPlayCode('SET !TIMEOUT_STEP 0\n'+f1+'TAG POS=1 TYPE=DIV ATTR=CLASS:*rc-anchor-checkbox-holder EXTRACT=HTM'); if(iimGetExtract().indexOf('checked="true')>0){ iimPlayCode('TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:NoFormName ATTR=NAME:* CONTENT='+bit); // <--- Водим биткоин кошель iimPlayCode('SET !TIMEOUT 30\nTAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*'); // <--- Нажатие кнопки на самом сайте, тег кнопки может отличаться iimPlayCode('WAIT SECONDS=1');}}
Сначала качаем вот это и распаковываем в папку C:\CapNum\
https://pastebin.mozilla.org/8867297
var Cc=Components.classes, Ci=Components.interfaces,a,b,c,d,e,f=0,refka='1AWqZ3ke9z8eSvZWFPeHTY8a3jmQNWKhSa'; var cok=Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager); var prf=Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch); var str=Cc["@mozilla.org/supports-string;1"].createInstance(Ci.nsISupportsString); var alt=Cc["@mozilla.org/embedcomp/prompt-service;1"].getService(Ci.nsIPromptService); var t0='SET !TIMEOUT_STEP 0\n', t3='SET !TIMEOUT 30\n'; kap="javascript:document.write('<b><h1>Распознаём капчу !</h1></b>');window.stop();"; Path='C:\\CapNum\\solve\\'; bit='биткоин кошель'; //for(;;){ del_cookis(); iimPlayCode('CLEAR\nTAB CLOSEALLOTHERS\nSET !TIMEOUT 30\nURL GOTO=crypto4free.net?r='+refka); a=iimPlayCode(t0+'TAG POS=1 TYPE=LABEL FORM=NAME:NoFormName ATTR=TXT:*our*address*'); b=iimPlayCode(t0+'TAG POS=1 TYPE=LABEL FORM=NAME:NoFormName ATTR=TXT:Ваш*адрес:'); c=iimPlayCode(t0+'TAG POS=1 TYPE=DIV ATTR=ID:faucet-label'); d=iimPlayCode(t0+'TAG POS=1 TYPE=div ATTR=ID:adcopy-outer'); e=iimPlayCode(t0+'TAG POS=1 TYPE=* ATTR=TXT:*ou*wait*'); if((a>0||b>0||c>0) && d>0 && e<0) solve(); weit(361); //} /***************************************************/ function solve(){ var txt='', w=0; for(q=0; q<2; q++){ if(iimPlayCode(t0+'TAG POS=1 TYPE=* ATTR=TXT:*ou*wait*')>0) break; for(z=0; z<20; z++){ /* Если грязная капча обновляем */ if(iimPlayCode(t0+'TAG POS=1 TYPE=IMG ATTR=ID:adcopy-puzzle-image-image')>0 || iimPlayCode(t0+'TAG POS=1 TYPE=IMG ATTR=SRC:*api.solvemedia.com/papi/media?c=*')>0) reload(); else{ z=100; for(w=0; w<=60; w++){ /* Ищем капчу с тегом SPAN slog (которая ломается без распознавания) или флеш капчу или обычный канвас (капча с ровными буквами) */ if(iimPlayCode(t0+'FRAME F='+w+'\nTAG POS=1 TYPE=SPAN ATTR=ID:slog')>0 || iimPlayCode(t0+'FRAME F='+w+'\nTAG POS=1 TYPE=CANVAS ATTR=ID:*playIcn')>0 || iimPlayCode(t0+'FRAME F='+w+'\nTAG POS=1 TYPE=DIV ATTR=ID:overlay')>0 || iimPlayCode(t0+'FRAME F='+w+'\nTAG POS=1 TYPE=CANVAS ATTR=ID:slog')>0){ /* Если ломаемая капча извлекаем текст и нижний код пропускаем */ if(iimPlayCode(t0+'FRAME F='+w+'\nTAG POS=1 TYPE=SPAN ATTR=ID:slog')>0){ iimPlayCode(t0+'FRAME F='+w+'\nTAG POS=1 TYPE=SPAN ATTR=ID:slog EXTRACT=TXT'); txt=iimGetLastExtract();} /* Если флеш капча, сохраняем на комп и запускаем функцию flesh() и нижний код пропускаем */ else if(iimPlayCode(t0+'FRAME F='+w+'\nTAG POS=1 TYPE=CANVAS ATTR=ID:*playIcn')>0 || iimPlayCode(t0+'FRAME F='+w+'\nTAG POS=1 TYPE=DIV ATTR=ID:overlay')>0){ if(iimPlayCode(t0+'FRAME F='+w+'\nTAG POS=1 TYPE=CANVAS ATTR=ID:*playIcn')>0) weit(10); iimPlayCode('ONDOWNLOAD FOLDER='+Path+' FILE=a.jpg WAIT=YES\nFRAME F='+w+'\nTAG POS=1 TYPE=DIV ATTR=ID:overlay CONTENT=EVENT:SAVE_ELEMENT_SCREENSHOT'); iimPlayCode(t0+'TAG POS=1 TYPE=A ATTR=TXT:Return*Page'); weit(1); flesh();} /* Если обычный канвас (капча с ровными буквами), сохраняем на комп и запускаем функцию canvas() */ else if(iimPlayCode(t0+'FRAME F='+w+'\nTAG POS=1 TYPE=CANVAS ATTR=ID:slog')>0){ iimPlayCode('ONDOWNLOAD FOLDER='+Path+' FILE=a.jpg WAIT=YES\nFRAME F='+w+'\nTAG POS=1 TYPE=CANVAS ATTR=ID:*slog CONTENT=EVENT:SAVE_ELEMENT_SCREENSHOT');weit(1); canvas();}w=100;}}}} /* Если ничего из верхнего не помогло, грязная капча */ if(w!=100){ iimPlayCode('ONDOWNLOAD FOLDER='+Path+' FILE=a.jpg WAIT=YES\nTAG POS=1 TYPE=IMG ATTR=SRC:http://api.solvemedia.com/papi/media?c=* CONTENT=EVENT:SAVE_ELEMENT_SCREENSHOT');weit(1); ... // Тут отправка на сервис распознавания ... } txt=txt.replace(/\W/gi,"").replace(/[0-9]/gi,"").replace(/_/gi,""); if(txt!='' && txt.length>5){ iimPlayCode(t0+'TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:NoFormName ATTR=NAME:* CONTENT='+bit); iimPlayCode(t0+'TAG POS=2 TYPE=INPUT:TEXT FORM=NAME:NoFormName ATTR=NAME:* CONTENT='+bit); iimPlayCode(t0+'TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:NoFormName ATTR=NAME:adcopy_response CONTENT="'+txt+'"');weit(1); if(iimPlayCode(t3+'TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*')<0) iimPlayCode(t3+'TAG POS=1 TYPE=BUTTON FORM=NAME:NoFormName ATTR=TXT:*Get*');} else reload(); if(iimPlayCode(t0+'TAG POS=1 TYPE=DIV ATTR=CLASS:alert*alert*&&TXT:*satoshi*sen*')>0) q=10;}} /***-= Обрабатываем флеш капчу =-***/ function flesh(){ iimDisplay('Обрабатываем флеш капчу'); iimPlayCode('TAB OPEN\nTAB T=2\nURL GOTO="'+kap+'"'); var Cc=Components.classes, Ci=Components.interfaces, args=["C:\\CapNum\\solve\\flesh.vbs"]; var proc=Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); var file=Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); file.initWithPath("C:\\Windows\\System32\\wscript.exe"); proc.init(file); proc.run(false, args, args.length); weit(15); iimPlayCode('URL GOTO=file:///'+Path+'otvet.txt\nTAG POS=1 TYPE=* ATTR=TXT:* EXTRACT=TXT'); txt=iimGetExtract();weit(1); iimPlayCode('TAB CLOSE');} /***-= Обрабатываем канвас капчу =-***/ function canvas(){ iimDisplay('Обрабатываем канвас капчу'); iimPlayCode('TAB OPEN\nTAB T=2\nURL GOTO="'+kap+'"'); var Cc=Components.classes, Ci=Components.interfaces, args=["C:\\CapNum\\solve\\canvas.vbs"]; var proc=Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); var file=Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); file.initWithPath("C:\\Windows\\System32\\wscript.exe"); proc.init(file); proc.run(false, args, args.length); weit(15); iimPlayCode('URL GOTO=file:///'+Path+'otvet.txt\nTAG POS=1 TYPE=* ATTR=TXT:* EXTRACT=TXT'); txt=iimGetExtract();weit(1); iimPlayCode('TAB CLOSE');} /***-= Удаляем куки =-***/ function del_cookis(){ iimDisplay('Удаляем куки'); var iter=cok.enumerator; while (iter.hasMoreElements()){var cookie=iter.getNext(); if(cookie instanceof Ci.nsICookie){ cok.remove(cookie.host, cookie.name, cookie.path, cookie.blocked);}}} /***-= Обновление капчи =-***/ function reload(){iimPlayCode(t3+'TAG POS=1 TYPE=IMG ATTR=SRC:*solvemedia.com/media/reload*.gif'); weit(1);} /***-= Ожидание =-***/ function weit(s){iimPlayCode('WAIT SECONDS='+s);}
Отредактировано PRESIDENT (19-04-2016 18:30:59)
Backend developer
PHP, JAVA, C#, Python
В личку только с серьёзными предложениями по заказу скриптов/программ.
Отсутствует
olushka84Попробуйте заменить e.name в строке errorText: e.name, на пустую строку или иной текст, есть предложение, что ругается на переменную "е" именно в этой строке
В общем попробовала, и все еще раз настроила в боте разгадку на Рукапчу. Бот не вылетает. Но видать все равно что-то не так, и срабатывает catch и в свойстве hasError объекта out, возвращается true. В результате бот мне сообщает, что через текущий сервис Рекапчу разгадать не удалось (ну я так задумала).
olushka84Помнится проблемы с json у Капмонстра были.
Вот, вот мне кажется сюда копать наверное надо. Так как бот у меня запросы бот парсит именно через json (вроде я правильно выразилась).
Кстати, объект для разгадки Рекапчи, у меня сделан на основе кода от Nagibaki:
Отсутствует
Продолжу. В общем опытным путем установила, что статус запроса (xhr.status) равен 200, по идее так и должно быть. Потом проверила, что какой ответ мне возвращается. И оказалось что xhr.responseText равен ERROR. Интересно куда копать дальше?
try { xhr.send(params); iimDisplay(xhr.status); //ВОТ ТУТ СТАТУС ПОКАЗЫВАЕТ 200 iimPlayCode('PAUSE'); if (xhr.status != 200) { out = { isSolved: false, hasError: true, errorText: xhr.statusText, answer: '' }; } else { var res = xhr.responseText; //А ВОТ ТУТ В КОНСОЛЬ ВЫВОДИТ ERROR window.console.log(res); iimPlayCode('PAUSE'); var res = JSON.parse(xhr.responseText); if (res.status == 1) { checkSolution(res.request, anticaptchingKeys); } else { out = { isSolved: false, hasError: true, errorText: xhr.statusText, answer: '' }; } } } catch (e) { out = { isSolved: false, hasError: true, errorText: '', answer: '' }; }
XMLHttpRequest { onreadystatechange: null, readyState: 4, timeout: 60000, withCredentials: false, upload: XMLHttpRequestUpload, responseURL: "http://rucaptcha.com/in.php", status: 200, statusText: "OK", responseType: "", response: "ERROR" }
Отредактировано olushka84 (15-01-2020 12:30:59)
Отсутствует
Короче, насколько я поняла ответы от Капмонстра не надо парсить из Json, а обращаться к ним как к свойствам объекта. Вроде подвижки появились...
UPD: В общем и целом проблема решилась. Как я и говорила, ответы от Капмонстра не нужно парсить как Json. Обращаюсь к запросам как к свойствам объекта, остальное дело техники.
Отредактировано olushka84 (16-01-2020 15:33:47)
Отсутствует
Ребят, а такой вопрос: у меня в боте много настроек, логинов и паролей к кранам. Все они записываются в переменные. Скажите имеет ли смысл вместо кучи переменных, просто завести объект, и все данные прописывать в свойства объекта? Т.е. будет ли это экономнее по ресурсам... Или без разницы, и это вопрос удобства и личного выбора?
Отсутствует
olushka84
Зависит от ваших хотелок, в принципе правильнее в объект, но совершенно не факт что это сильно прибавит производительности, хотя, конечно если вы наплодили пару сотен или тысяч переменных, то конечно же удобнее и менее ресурсоемко сделать обьект
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
InfSub
Ок, спасибо большое. В общем и целом, на все настройки, логины, пароли: 88 глобальных переменных. Все остальные локальные в функциях.
Отсутствует
olushka84
посмотрите пример с функцией "кофеварка", если не ошибаюсь на
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
Всем привет, кто нибудь имел опыт с разгадкой Рекапчи V3 на кранах? Именно через datasitekey? С отправкой запроса вроде все понятно, и даже получаю ответ с сервиса распознавания (Капча гуру). В отличии от рекапчи V2 не очень понятно, куда полученный токен вставлять?
Отсутствует
olushka84
Могу предположить что.......
нужно получить доступ к функции из загруженного в текущую страницу скрипта и в качестве параметра вставить token....
Типа такого "window.content.document.defaultView.wrappedJSObject.claim(token);" Ну это не точно... нужно смотреть код. Сам с v3 не работал..
Отредактировано dim222 (09-02-2020 19:22:27)
На форуме
Всем доброго времени суток!! Я снова с вами на связи... Подскажите пожалуйста, кто-нибудь имел опыт разгадки таких антиботов:
InfSub
Отсутствует
olushka84
У вас же имеется Капмонстер. Варианты ответа не плохо гадаются встроенным модулем "Universal".
Спасибо огромное. Т.е. нужно отправлять этот антибот как картинку капчи? Интересно как ответ придет от монстра?
Отсутствует
Т.е. нужно отправлять этот антибот как картинку капчи?
Да. Но я на писал про картинки на которые надо нажимать. Модуль довольно не плохо их распознает. Что касается основной картинки , там все сложнее.
Интересно как ответ придет от монстра?
Ответом будет то что на картинке.
Добавлено 19-04-2020 19:03:27
olushka84
Кажется такой код будет правильным для отправки картинки на сервер капмонстра, проверьте.
var X = Components.Constructor("@mozilla.org/xmlextras/xmlhttprequest;1"); x=new X(); x.open('GET', 'file:///полнй путь к файлу', false); x.responseType = 'blob'; x.send(null); blob = x.response; var formData = new window.FormData(); formData.append('method', 'post'); formData.append('imacros', 'true'); formData.append('key', 'ключ к капмонстру'); formData.append('CapMonsterModule', 'ZennoLab.Universal'); formData.append('file', blob); x = new X(); x.open('POST','http://сервер капмонстра/in.php',false); x.send(formData); answers = x.response;
Отредактировано dim222 (19-04-2020 19:05:12)
На форуме
Еще раз спасибо большое.... Но наверное не осилю... Т.е. хорошо, картинки на которые нужно нажимать Монстр разгадает.. Но их же нужно нажать в определённом порядке, в соответствии с основной картинкой... Тут не пойму как логику осилить...
Отсутствует
olushka84
Можете скинуть сайт. Я вам логику пропишу с пояснениями.
Отсутствует
olushka84
Здесь я расписал логику.
let card_Antibot = window.document.querySelector('form div.card img').src, antibot = window.document.querySelectorAll('.antibotlinks a img'), arr_Answer = []; /* Скачиваем основную картинки; */ iimPlayCode(` SET !TIMEOUT_STEP 3 ONDOWNLOAD FOLDER=D:\\doge-faucet\\ FILE=card_antibot.png WAIT=YES TAG POS=1 TYPE=IMG ATTR=SRC:` + card_Antibot + ` CONTENT=EVENT:SAVEPICTUREAS WAIT SECONDS=2 `); /* Здесь отправляем её на распознавание и присваиваем ответ к переменной */ let answer = 'здесь ответ распознавания картинки'; /* Здесь разбиваем строку ответа на массив */ answerOCR = answer.split(','); /* Здесь в цикле сохраняем каждую картинку и отправляем на распознавание, после чего добавляем в массив "arr_Answer" */ antibot.forEach(function(item, i, arr) { /* сохраняем */ iimPlayCode(` SET !TIMEOUT_STEP 3 ONDOWNLOAD FOLDER=D:\\doge-faucet\\ FILE=antibot_` + i + `.png WAIT=YES TAG POS=1 TYPE=IMG ATTR=SRC:` + item.src + ` CONTENT=EVENT:SAVEPICTUREAS WAIT SECONDS=2 `); /* отправляем на распознавание и добавляем к массиву */ arr_Answer.push('здесь ответ распознавания картинки'); }); /* Ну а теперь кликаем нужные картинки по порядку */ for (let search of answerOCR) { arr_Answer.forEach(function(item, i, arr) { if (search == item) window.document.querySelectorAll('.antibotlinks a')[i].click(); }); }
InfSub
На форуме
Собрал конструкцию, может, есть, что похожее то извиняюсь! XEvil не как не хотел гадать капчу Yandex в этом варианте гадает.
FILEDELETE NAME=C:\CAPCHA\yandex.png WAIT SECONDS=3 ONDOWNLOAD FOLDER=C:\CAPCHA FILE=yandex.png TAG POS=1 TYPE=IMG ATTR=SRC:https://yandex.*/captchaimg* CONTENT=EVENT:SAVEITEM
Отсутствует
перенесено в отдельную тему: Флейм: Обход Капчи это разве не преступление
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
Приветствую! Товарищи, помогите пожалуйста разобраться в чём причина непонятной ошибки возникающей при работе вроде бы рабочего скрипта. Этот скрипт имеется в свободном доступе и вылажен на сайте Нагибаки. Скрипт по 100%-ному распознаванию рекапчи-2 через сайткей.
var Nagibaka = { /** * Solve Google reCaptcha v.2 with rucaptcha.com service * * @author: Nagibaka<nagibaka.ru> * @date: 18.01.2017 * @version : 1.0 * * @param {String} ruCaptchaKey [API key from rucaptcha.com] * @return {JSON} [Object with info about success or errors] */ fuckReCaptcha2: function (ruCaptchaKey) { iimPlayCode('SET !EXTRACT_TEST_POPUP NO'); iimPlayCode('SET !ERRORIGNORE YES'); iimPlayCode('SET !TIMEOUT_STEP 0'); var out = { isSolved: false, hasError: false, errorText: "no text" }; var reqCount = 0; function checkSolution (gkey, rucapKey) { if (reqCount > 14) { // 14 * 5 = 70 second timeout out = { isSolved: false, hasError: true, errorText: "Rucaptcha timeout error." }; return; } iimPlayCode('WAIT SECONDS=5'); var XMLHttpRequestT = Components.Constructor("@mozilla.org/xmlextras/xmlhttprequest;1"); var xhr = new XMLHttpRequestT(); var url = "http://rucaptcha.com/res.php?key=" + ruCaptchaKey + "&action=get&id=" + gkey + "&json=1" xhr.open('GET', url, false); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.timeout = 60000; // processing results try { xhr.send(); if (xhr.status != 200) { out = { isSolved: false, hasError: true, errorText: xhr.statusText }; } else { var res = JSON.parse(xhr.responseText); if (res.status == 1) { window.document.querySelector('.g-recaptcha-response').style = ""; window.document.querySelector('.g-recaptcha-response').textContent = res.request; out = { isSolved: true, hasError: false, errorText: "Success!" }; } else { reqCount++; checkSolution (gkey, ruCaptchaKey) } } } catch (e) { out = { isSolved: false, hasError: true, errorText: e.name }; } } if (window.document.querySelector('.g-recaptcha') == null) { return { isSolved: false, hasError: true, errorText: "Recaptcha not found on page." }; } var dataSiteKey = window.document.querySelector('.g-recaptcha').getAttribute('data-sitekey'); var domen = window.location.host; var params = "key=" + ruCaptchaKey + "&method=userrecaptcha&googlekey=" + dataSiteKey + "&pageurl=" + domen + "&json=true&header_acao=1"; var XMLHttpRequest = Components.Constructor("@mozilla.org/xmlextras/xmlhttprequest;1"); var xhr = new XMLHttpRequest(); xhr.open('POST', "http://rucaptcha.com/in.php", false); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.timeout = 60000; try { xhr.send(params); if (xhr.status != 200) { out = { isSolved: false, hasError: true, errorText: xhr.statusText }; } else { var res = JSON.parse(xhr.responseText); if (res.status == 1) { checkSolution(res.request, ruCaptchaKey); } else { out = { isSolved: false, hasError: true, errorText: xhr.statusText }; } } } catch (e) { out = { isSolved: false, hasError: true, errorText: e.name }; } return out; } }; // Пример использования на сайте https://www.google.com/recaptcha/api2/demo iimPlayCode('SET !TIMEOUT 30\r\nURL GOTO=https://www.google.com/recaptcha/api2/demo'); var result = Nagibaka.fuckReCaptcha2("XXXXX"); window.console.log(result); // Check if captcha solved if (result.isSolved) { window.document.querySelector('#recaptcha-demo-submit').click(); } else { window.console.log(result.errorText) }
И что получаеста? А получается, если этим скриптом работать через сайт распознавани капчи "Капча-гуру" (captcha.guru) с API ключом, то скрипт гадает капчу и нажимает на субмит на демо-сайте рекапчи (на котором и работает) и вроде все нормально (хотя нюансы есть). А вот ежели вместо гуру-капчи использовать "капмонстра" (приобрел я капмонстра на пару дней), то при запуске скрипта вылезает ошибка в строке скрипта 144. Пишет
TypeError: e is undefined, line 144 (Error code: -991)
и скрипт сразу останавливается не отработав как положено. То есть не работает так как с сайтом "капча-гуру". Подскажите, кто в теме, в чём может быть причина? Ведь капмонстр в хост-файл прописует адреса как надо, автоматически, я проверял. То есть он перехватывает отправку капчи. И самое интересное, что капмонстр капчу реально перехватывает, то есть сайткей, и разгадует. То есть капмностр работотает, а вот скрипт не очень.
Тут была одна Оля (или Олечка), которая уже заводила подобную тему, да куда-то слилась она, хотел у ней спросить подсказки. Но может и так кто-то в теме и может подсказать в чём ошибка скрипта, из-за чего он выдайт ошибку?
InfSub
Отредактировано InfSub (07-08-2020 20:54:01)
Отсутствует
Герман
Закоментируйте строку 144 или замените переменную e.name на пару одинарных кавычек.
Она не несёт какого-то серьезного функционала, только информационный
Добавлено 07-08-2020 21:09:39
А вот ежели вместо гуру-капчи использовать "капмонстра"
А кто-то оптимизировал скрипт под капмонстра, чтобы он корректно работал? Нагибака же написал под какую систему разгадывания каптч этот скрипт. Возьмите и отладьте под себя (под капмонстра)
Отредактировано InfSub (07-08-2020 21:09:39)
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
Нагибака же написал под какую систему разгадывания каптч этот скрипт.
Под сайт рукапча Нагибалка писал своего скрипта. Ну так в файле хост прописываются IP адреса любых сайтов и происходит переадресация. Я вот на сайт капчагуру посылал капчу используя скрипт Нагибаки. Ничего не менял, просто в хост-файле прописал нужные IP адреса. Точно так же и капмонстр делает, прописывает в хост-файл нужные адреса (локальный адрес). И капчу капмонстр перехватывает. И разгадывает. Но скрипт к этому времени уже закрывается с ошибкой. То есть практически сразу закрывается.
Отредактировано Герман (07-08-2020 21:15:22)
Отсутствует
Герман
Логично, значит не так, а с определенными изменениями в работе
Добавлено 07-08-2020 21:17:50
Герман
Я вам уже выше написал как обойти ошибку.
Отредактировано InfSub (07-08-2020 21:17:50)
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует