Готовый код Imacros

  • Автор темы Автор темы Derrini
  • Дата начала Дата начала
Я в курсе про эти сайты периодически туда ныряю, тогда если можно вопрос с примером. По твоему совету стал приписывать код скрипта
на iimPlayCode и как говорится получил больше вопросов.
Вот этот код работает:
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);
а вот уже этот код через iimPlayCode не работает и даже ошибки не выдает:
iimPlayCode('SET !TIMEOUT_STEP 0');
iimPlayCode('FRAME NAME="rc0"');
iimPlayCode('TAG POS=1 TYPE=SPAN ATTR=CLASS:rc-anchor-error-msg EXTRACT=TXT');,
НО если вот этот кусок кода запихать в одну строчку с одним iimPlayCode то работает на ура.
Если ты работаешь с фреймами например FRAME NAME="rc0" то он должен писаться в одной строке с действием которое находится в этом фрейме.
iimPlayCode('SET !TIMEOUT_STEP 0\nFRAME NAME="rc0"\nTAG POS=1 TYPE=SPAN ATTR=CLASS:rc-anchor-error-msg EXTRACT=TXT');
ТОчно так же с SET !TIMEOUT_STEP 0.
SET !TIMEOUT_STEP 0 это ожидание если например элемент на странице не подгрузился и у тебя стоит SET !TIMEOUT_STEP 10 то скрипт если не видит на страницы элемент он будет ждать его 10 сек или столько сколько выставишь.
Отдельно команды которые стоит писать это iimPlayCode('WAIT SECONDS=1'),всякие вставки например кошелька (опять же если у него нет фрейма,если есть то пиши в 1 строку вместе с фреймом)
 
Я в курсе про эти сайты периодически туда ныряю, тогда если можно вопрос с примером. По твоему совету стал приписывать код скрипта
на iimPlayCode и как говорится получил больше вопросов.
Вот этот код работает:
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);
а вот уже этот код через iimPlayCode не работает и даже ошибки не выдает:
iimPlayCode('SET !TIMEOUT_STEP 0');
iimPlayCode('FRAME NAME="rc0"');
iimPlayCode('TAG POS=1 TYPE=SPAN ATTR=CLASS:rc-anchor-error-msg EXTRACT=TXT');
НО если вот этот кусок кода запихать в одну строчку с одним iimPlayCode то работает на ура.
И до кучи вопрос по версиям imacros и мозилы, на тобой упомянутом сайте пишут о не стабильно работающих новых версиях,
пробовал поставить старую версию imacros, гаснут кнопки "воспроизвести" "пауза" "стоп"
 
Если ты работаешь с фреймами например FRAME NAME="rc0" то он должен писаться в одной строке с действием которое находится в этом фрейме.
iimPlayCode('SET !TIMEOUT_STEP 0\nFRAME NAME="rc0"\nTAG POS=1 TYPE=SPAN ATTR=CLASS:rc-anchor-error-msg EXTRACT=TXT');
ТОчно так же с SET !TIMEOUT_STEP 0.
SET !TIMEOUT_STEP 0 это ожидание если например элемент на странице не подгрузился и у тебя стоит SET !TIMEOUT_STEP 10 то скрипт если не видит на страницы элемент он будет ждать его 10 сек или столько сколько выставишь.
Отдельно команды которые стоит писать это iimPlayCode('WAIT SECONDS=1'),всякие вставки например кошелька (опять же если у него нет фрейма,если есть то пиши в 1 строку вместе с фреймом)
Спасибо вразумил.
 
И до кучи вопрос по версиям imacros и мозилы, на тобой упомянутом сайте пишут о не стабильно работающих новых версиях,
пробовал поставить старую версию imacros, гаснут кнопки "воспроизвести" "пауза" "стоп"
Насчет нестабильности есть много мнений,у меня с последними версиями проблем не возникало если новая мозилла и новый imacros.Сам же я использую мозилла версии 17 с imacros 8.6 проблем в работе не замечаю так же.
 
Ну как получилось доделать?
В стадии тестирования и улучшения
Пока такие резаультаты за сутки с 70 браузеров.
IMG_07072016_002046.png
 
  • Спасибо
Реакции: Luda1
Обычно после таких выкладываний в открытый доступ тема очень быстро умирает. Или планируется под продажу?
 
Обычно после таких выкладываний в открытый доступ тема очень быстро умирает. Или планируется под продажу?
Я ранее писал паблик скрипт под краны,примерно в январе 2015 и поддерживал скрипт долго.Пользователей скрипта было более 800.Щас скрипт довожу до идеала чтоб меньше следить и редактировать что либо.
 
maloibtc
Подскажите, как Вам можно написать личное сообщение? Есть ли на этом форуме возможность приватной переписки? Все облазил так и не нашел. У поддержки спрашивал тоже молчат.
 
maloibtc
Подскажите, как Вам можно написать личное сообщение? Есть ли на этом форуме возможность приватной переписки? Все облазил так и не нашел. У поддержки спрашивал тоже молчат.
Без понятия.Но свою разгадку антибота я раскрывать не буду.
 
maloibtc

хочу купить твой скрипт ??
 
Нужна помощь за вознаграждение написание скрипта отправки капчи из imacros в СМ2 )
 
кто работает с imacros скажыте как разгадать ReCaptchaAssociation
 
нифига непонимаю . скажите новичку , как ету ReCaptchaAssociation сохранить на комп а потом в СР отправить через http://imacros2.rucaptcha.com/new/ . я в кодах не очень разбираюсь . помогите небесплатно конечно
 
В последнее время появилось много вопросов так или иначе посвященных связке 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 на свои.




как прописать в коде чтобы рекаптча не обновлялась пока выпадет аудиокаптча а выполняла функцыю по роспознавании ReCaptchaAssociation ???
 
В последнее время появилось много вопросов так или иначе посвященных связке 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 на свои.


что где удалить чтобы капча необновлялась ???
 
что где удалить чтобы капча необновлялась ???
Вам написали же несколькими постами выше
на предыдущей странице глянь. там все есть.
Если за несколько дней (и несколько одинаковых по смыслу постов) вам никто не ответил, значит что у людей нет готового кода под ваш хотелки. Отсюда вывод - надо или учить imacros+javascript самостоятельно или найти того кто его вам напишет, а не спамить сообщениями в теме.
 
SATOSHI
Я ,наверное, тебе дал ответ на форуме мозилы. Тебе надо понять элементарные вещи в Imacrose. Здесь и там (форум мазилы) выкладываются примеры, а там уже каждый подстраивает их под себя. У меня несколько месяцев ушло , чтобы понять, что и как. Смотри ,читай,вникай, и ты поймешь, что к чему.
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)