В последнее время появилось много вопросов так или иначе посвященных связке CapMonster2+Imacros.
Пара советов тем, кто пытается использовать эти 2 продукта:
1. Изучите синтаксис и команды imacros самостоятельно - не имея представления о том, что, где и как работает, при малейшем изменении страницы или каптчи ваши готовые (взятые с форума) скрипты становятся просто бесполезны.
2. Изучая imacros обязательно!!! сразу учитесь использовать javascript - только он позволит сделать ваши скрипты динамичными и подходящими к любым условиям.
Чтобы не быть голословным - вот код сохранения аудиорекаптчи на компьютер, оправка на распознавание и ввод ответа. При выпадение вместо звука новой текстовой каптчи рекаптча обновляется пока не выпадет аудиокаптча. При появлении сообщения "Вы должны выполнить несколько заданий" - каптча разгадывается еще раз (максимум 3 раза больше просто смысла нет).
var zapros=0;
var t1=0;
var n = '\n';
var standartcode = 'SET !EXTRACT_TEST_POPUP NO \n SET !ERRORIGNORE YES \n';
var SaveTo="C:\\www\\"; //Путь для сохранения файла
var FileName='AudioReCaptcha.mp3' //Имя файла
var Forma='file:///C:/www/imacros.html' //Путь к форме imacros
var ip='1.1.1.1'; //ip вашего сервера CapMonster2
var key=''; //ключ (если надо) для вашего сервера CapMonster2
function CloseAllOthers() {
var code =standartcode;
code += 'SET !TIMEOUT_STEP 0'+n;
code += 'ONDIALOG POS=1 BUTTON=OK CONTENT='+n;
code += 'TAB T=1'+n;
code += 'TAB T=0'+n;
code += 'TAB T=-1'+n;
code += 'TAB T=-2'+n;
code += 'TAB T=-3'+n;
code += 'TAB T=-4'+n;
code += 'TAB CLOSEALLOTHERS'+n;
iimPlayCode(code);
}
function PostCapMonster() {
var code = standartcode;
code+='TAB OPEN'+n;
code+='TAB T=2'+n;
code+='URL GOTO='+Forma+n;
code+='SET !TIMEOUT_STEP 0'+n;
code+= 'WAIT SECONDS=1'+n;
iimPlayCode(code);
var form0 = window.document.forms[0];
form0.action='http://'+ip+'/in.php'
var code = standartcode;
code+='TAG POS=1 TYPE=INPUT:TEXT ATTR=NAME:key CONTENT='+key+n;
code+='TAG POS=1 TYPE=INPUT:TEXT ATTR=NAME:CapMonsterModule CONTENT=ZennoLab.AudioReCaptcha'+n;
code+='TAG POS=1 TYPE=INPUT:FILE ATTR=TYPE:file CONTENT='+SaveTo+FileName+n;
code+='TAG POS=1 TYPE=INPUT:SUBMIT FORM=ACTION:* ATTR=*'+n;
code+='TAG POS=1 TYPE=* ATTR=TXT:* EXTRACT=TXT'+n;
iimPlayCode(code);
var capchaID=iimGetExtract(1);
if (capchaID.indexOf('OK')!==-1){
capchaID=capchaID.substring(3,capchaID.length);
var capchaAnsver=SendPovtor(capchaID);
} else {
iimDisplay(capchaID);
}
return capchaAnsver;
}
function SendPovtor(capchaID){
var wait=10
var code = standartcode;
code+= 'WAIT SECONDS='+wait+n;
code+='URL GOTO=http://'+ip+'/res.php?action=get&id='+capchaID+n;
code+='TAG POS=1 TYPE=* ATTR=TXT:* EXTRACT=TXT'+n;
iimPlayCode(code);
var capchaAnsver=iimGetExtract(1);
iimDisplay(capchaAnsver);
if (capchaAnsver.indexOf('OK')!==-1){
capchaAnsver=capchaAnsver.substring(3,capchaAnsver.length);
zapros=0;
return capchaAnsver;
} else if (capchaAnsver.indexOf('CAPCHA_NOT_READY')!==-1) {
iimDisplay(capchaAnsver);
if (zapros<=5) {
zapros=zapros+1;
capchaAnsver=SendPovtor(capchaID);
} else if (5<zapros) {
zapros=0;
}
}
return capchaAnsver;
}
function SaveCapcha () {
try{
var frame0 = window.document.querySelector('iframe[src^="https://www.google.com/recaptcha/api2/anchor?k="]');
frame0.id = 'rc0';
frame0.name = 'rc0';
}catch(e){
var grecaptcha = window.document.getElementsByClassName('g-recaptcha')[0];
var frame0 = grecaptcha.childNodes[0].childNodes[0].childNodes[0];
frame0.id = 'rc0';
frame0.name = 'rc0';
}
var code = standartcode;
code += 'SET !TIMEOUT_STEP 0' + n;
code += 'FRAME NAME="rc0"' + n;
code += 'TAG POS=1 TYPE=SPAN ATTR=CLASS:rc-anchor-error-msg EXTRACT=txt' + n;
iimPlayCode(code);
if (iimGetExtract(1)==null){
var code = standartcode;
code += 'WAIT SECONDS=1' + n;
code += 'FRAME NAME="rc0"' + n;
code += 'WAIT SECONDS=1' + n;
code += 'TAG POS=1 TYPE=DIV ATTR=ROLE:presentation' + n;
code += 'WAIT SECONDS=3' + n;
code += 'TAG POS=1 TYPE=DIV ATTR=CLASS:*rc-anchor-checkbox-holder EXTRACT=HTM' + n;
iimPlayCode(code);
if (iimGetExtract(1).indexOf('checked="true')==-1){
try {
var frame1 = window.document.getElementsByTagName('div')[window.document.getElementsByTagName('div').length - 1].childNodes[0];
frame1.id = 'rc1';
frame1.name = 'rc1';
} catch (e){
var frame1 = window.document.querySelector('iframe[src^="https://www.google.com/recaptcha/api2/frame?c="]');
frame1.id = 'rc1';
frame1.name = 'rc1';
}
var code = standartcode;
code += 'SET !TIMEOUT_STEP 0' + n;
code += 'FRAME NAME="rc1"' + n;
code += 'EVENT TYPE=CLICK SELECTOR="#recaptcha-audio-button" BUTTON=0' + n;
code += 'WAIT SECONDS=2' + n;
code += 'TAG POS=1 TYPE=DIV ATTR=CLASS:*rc-text-instructions EXTRACT=HTM' + n;
iimPlayCode(code);
if (iimGetExtract(1).indexOf('rc-text-instructions')!==-1){
var code = standartcode;
code += 'SET !TIMEOUT_STEP 0' + n;
code += 'FRAME NAME="rc1"' + n;
code += 'EVENT TYPE=CLICK SELECTOR="#recaptcha-reload-button" BUTTON=0' + n;
code += 'WAIT SECONDS=3' + n;
iimPlayCode(code);
SaveCapcha ();
return
}
var code = standartcode;
code += 'FRAME NAME="rc1"' + n;
code += 'ONDOWNLOAD FOLDER='+SaveTo+' FILE='+FileName+' WAIT=YES' + n;
code+= 'TAG POS=1 TYPE=A ATTR=CLASS:rc-audiochallenge-download-link CONTENT=EVENT:SAVETARGETAS'+n;
code += 'WAIT SECONDS=3' + n;
iimPlayCode(code);
var otvet=PostCapMonster();
CloseAllOthers();
var code = standartcode;
code += 'SET !TIMEOUT_STEP 0' + n;
code += 'FRAME NAME="rc1"' + n;
code += 'TAG POS=1 TYPE=INPUT ATTR=ID:audio-response CONTENT='+otvet+ n;
code += 'WAIT SECONDS=1' + n;
code += 'EVENT TYPE=CLICK SELECTOR="#recaptcha-verify-button" BUTTON=0' + n;
code += 'WAIT SECONDS=3' + n;
code += 'FRAME NAME="rc0"' + n;
code += 'TAG POS=1 TYPE=DIV ATTR=CLASS:*rc-anchor-checkbox-holder EXTRACT=HTM' + n;
iimPlayCode(code);
var checkcapcha=iimGetExtract(1);
if (checkcapcha.indexOf('checked="true')==-1){
t1=t1+1;
if (t1<=2){
iimDisplay('Капча разгадана неправильно');
var code = standartcode;
code += 'SET !TIMEOUT_STEP 0' + n;
code += 'FRAME NAME="rc1"' + n;
code += 'EVENT TYPE=CLICK SELECTOR="#recaptcha-reload-button" BUTTON=0' + n;
code += 'WAIT SECONDS=3' + n;
iimPlayCode(code);
SaveCapcha ();
return
} else {t1=0;}
} else {
iimDisplay('Капча разгадана правильно');
}
} else {
iimDisplay('Гугл сразу согласился что я не робот');
}
} else {}
return
}
SaveCapcha ()
Кроме это прикрепляю форму imacros, которой пользуюсь сам.
В коде не забудьте изменить значения переменных
var SaveTo, var FileName, var Forma, var ip,var key на свои.