Не работает сниппет разгадывания аудиорекаптчи

nonc

Client
Регистрация
15.03.2016
Сообщения
34
Благодарностей
6
Баллы
8
Доброго времени суток, образовалась следующая проблема. До сегодняшнего дня пользовался скаченным отсюда http://zennolab.com/wiki/ru:addons:capmonster:rc-audio сниппетом для разгадки аудиорекаптчи, но начиная с сегодня данный сниппет более не работает. Действие по отправке аудиокаптчи на разгадку не выполняется. Могли бы Вы пофиксить эту проблему и предоставить рабочий вариант?
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
На каком сайте тестируете?
 

nonc

Client
Регистрация
15.03.2016
Сообщения
34
Благодарностей
6
Баллы
8

nonc

Client
Регистрация
15.03.2016
Сообщения
34
Благодарностей
6
Баллы
8

nonc

Client
Регистрация
15.03.2016
Сообщения
34
Благодарностей
6
Баллы
8

nonc

Client
Регистрация
15.03.2016
Сообщения
34
Благодарностей
6
Баллы
8

zortexx

Client
Регистрация
19.09.2011
Сообщения
2 520
Благодарностей
1 226
Баллы
113
скиньте пожалуйста код сниппета, так как предложенный здесь http://zennolab.com/wiki/ru:addons:capmonster:rc-audio до сих пор не работает
Используется код из вики: http://zennolab.com/wiki/en:addons:capmonster:rc-audio

Код:
// Основные параметры

// время ожидания
var waitTime = 1000;
// количество попыток распознать
var tryRecognize = 2;
// количество попыток загрузить элемент
var tryLoadElement = 60;
// показывать сообщения о прогрессе распознавания
var needShowMessages = false;
// проверять корректность распознанного ответа
var needToCheck = true;

// Вспомогательные переменные

// вкладка
var tab = instance.ActiveTab;
// поздравляем, вы не робот
var success = false;
// аудио файл
var file = string.Empty;
// файл был удален
var fileDeleted = true;
// ответ на аудио каптчу
var answer = string.Empty;
// новый вид рекаптчи 2
var isNewView = true;
// рекаптча 1
var isRecaptcha1 = false;
// время вышло
var timeout = false;
// ошибка загрузки файла
var fileLoadingError = false;
// cписок урлов скаченных файлов
var usedURLs = new List<string>();

// поиск кнопки открытия формы с аудио заданием
Action TryOpenAudioForm = () => {
for (int k = 0; k < tryLoadElement; k++)
{
var audioButton = tab.FindElementByAttribute("div", "id", "recaptcha-audio-button", "regexp", 0);
// если нашли
if (!audioButton.IsVoid)
{
// клик по кнопке
audioButton.Click();
break;
}
System.Threading.Thread.Sleep(waitTime); // подождём немного
if (k == (tryLoadElement - 1)) timeout = true;
}
System.Threading.Thread.Sleep(waitTime); // подождём немного
};

// открытие аудиозадания
Action OpenAudioTask= () => {
project.SendInfoToLog("Открываем форму с аудио заданием", needShowMessages);
if (isNewView)
{
//проверяем тип задания формы
var task = tab.FindElementByAttribute("div", "class", "rc-imageselect-desc-wrapper", "regexp", 0);
if (!task.IsVoid) TryOpenAudioForm(); // найдено графическое задание, значит открываем аудио
}
else
{
var elem = tab.FindElementByAttribute("input:submit", "class", @"fbc-button-audio fbc-button", "regexp", 0);
if (!elem.IsVoid) elem.Click();

tab.WaitDownloading();
var errorElem = tab.FindElementByAttribute("div", "class", "fbc-message", "regexp", 0);
if (!errorElem.IsVoid)
{
var attr = errorElem.GetAttribute("innertext");
if (attr.Contains("Please enable JavaScript and/or update your browser to get an audio challenge"))
{
throw new Exception("Не получилось открыть вкладку с аудиозаданием, попробуйте изменить userAgent");
}
}
}
};

// Определение версии рекапчи
Action NotRobotClick= () => {
for (int k = 0; k < tryLoadElement; k++)
{
// поиск кнопки "Я не робот"
var notRobot = tab.FindElementByAttribute("div", "class", "recaptcha-checkbox-checkmark", "regexp", 0);
// если нашли
if (!notRobot.IsVoid)
{
// клик по кнопке
notRobot.Click();
// подождём немного
System.Threading.Thread.Sleep(waitTime);

// если ввод каптчи не требуется
var check = tab.FindElementByAttribute("div", "class", "recaptcha-checkbox-checkmark", "regexp", 0);
if (!check.IsVoid)
{
if (check.OuterHtml.Contains("style=\"\""))
{
success = true;
break;
}
}

// Ждем пока загрузится форма
for (int j = 0; j < tryLoadElement; j++)
{
var loadedForm = tab.FindElementByAttribute("div", "class", "primary-controls", "regexp", 0);
if (!loadedForm.IsVoid) break;
else System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
if (j == (tryLoadElement - 1)) timeout = true;
}
break;
}
else
{
// проверяем наличие аудио кнопки рекаптчи 1
HtmlElement r1 = tab.FindElementById("recaptcha_switch_audio");
if (!r1.IsVoid)
{
r1.Click();
isRecaptcha1 = true;
break;
}

// проверяем вид рекаптчи2
var elem = tab.FindElementByAttribute("input:submit", "class", @"fbc-button-audio fbc-button", "regexp", 0);
if (!elem.IsVoid)
{
isNewView = false;
break;
}
System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
}
if (k == (tryLoadElement - 1)) timeout = true;
}
};

// скачиваем mp3-файл
Action GetAudioFile= () => {

var href = String.Empty;

// получаем аудио задание
for (int k = 0; k < tryLoadElement; k++)
{
if (isRecaptcha1)
{
var audioChallenge = tab.FindElementByAttribute("a", "id", "recaptcha_audio_download", "text", 0);
// если нашли, получаем ссылку на аудио файл
if (!audioChallenge.IsVoid)
{
href = audioChallenge.GetAttribute("href");
break;
}
else System.Threading.Thread.Sleep(waitTime);
}
else
{
if (isNewView)
{
var audioChallenge = tab.FindElementByAttribute("a", "class", "rc-audiochallenge-download-link", "regexp", 0);
// если нашли, получаем ссылку на аудио файл
if (!audioChallenge.IsVoid)
{
href = audioChallenge.GetAttribute("href");
break;
}
else System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
}
else
{
var audioChallenge = tab.FindElementByAttribute("audio", "class", "fbc-audio-controls", "regexp", 0);
// если нашли, получаем ссылку на аудио файл
if (!audioChallenge.IsVoid)
{
href = audioChallenge.FindChildByAttribute("source", "src", ".mp3", "text", 0).GetAttribute("src");
href = "https://www.google.com" + href;
break;
}
else System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
}
}
if (k == (tryLoadElement - 1)) timeout = true;
}

foreach (var usedUrl in usedURLs)
{
if (usedUrl.Contains(href))
throw new Exception("Отсутствует новый аудио файл");
}
usedURLs.Add(href);

project.SendInfoToLog("Скачиваем аудио файл", needShowMessages);
try
{
var proxy = instance.GetProxy();
var respType = ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.File;
var timeoutRequest = 30000;
var cookies = instance.GetCookie("google.com", true);
var userAgent = project.Profile.UserAgent;
var maxRedirectCount = 1;
var downloadPath = project.Directory + "\\audiofiles";
file = ZennoPoster.HttpGet(href, proxy, "UTF8", respType, timeoutRequest, cookies, userAgent, false, maxRedirectCount, null, downloadPath);
fileDeleted = false;
}
catch (Exception ex)
{
throw new Exception("Не удалось скачать аудио файл");
}
};

Action Recognize= () => {
project.SendInfoToLog("Распознаем", needShowMessages);
try
{
if (!File.Exists(file))
{
fileLoadingError = true;
fileDeleted = true;
return;
}
var bytes = File.ReadAllBytes(file);
if (bytes.Length < 1024)
{
fileLoadingError = true;
return;
}
string str = Convert.ToBase64String(bytes);
var rc = ZennoPoster.CaptchaRecognition("CapMonster2.dll", str, "CapMonsterModule=ZennoLab.AudioReCaptcha&ParallelMode=true");
answer = rc.Split(new [] {"-|-"}, StringSplitOptions.RemoveEmptyEntries)[0];
if (answer.Contains("133193320491090004119440")) throw new Exception("Your IP was banned!");
}
finally
{
if (File.Exists(file))
{
File.Delete(file);
fileDeleted = true;
}
}
};

Action InputAnswer= () => {
if (!String.IsNullOrEmpty(answer) && answer != "sorry")
{
project.SendInfoToLog("Вводим ответ", needShowMessages);
HtmlElement audioAnswerInput = null;
// ищем поле для ввода ответа
if (isRecaptcha1)
{
audioAnswerInput = tab.FindElementByAttribute("input:text", "id", "recaptcha_response_field", "text", 0);
}
else
{
if (isNewView) audioAnswerInput = tab.FindElementByAttribute("input:text", "id", "audio-response", "regexp", 0);
else audioAnswerInput = tab.FindElementByAttribute("input:text", "id", "response", "text", 0);
}

// если нашли
if (!audioAnswerInput.IsVoid)
{
// вводим ответ
audioAnswerInput.SetValue(answer, "None", false);
}

// подождём немного
System.Threading.Thread.Sleep(waitTime);
}
else throw new Exception("Ответ не получен");
};

// Подтверждаем
Action SubmitAnswer= () => {
// ищем кнопку "Подтвердить"
HtmlElement apply = null;
if (isNewView) apply = tab.FindElementById("recaptcha-verify-button");
else apply = tab.FindElementByAttribute("div", "class", "fbc-button-verify", "regexp", 0).FindChildByAttribute("input:submit", "fulltag", "input:submit", "text", 0);

if (!apply.IsVoid) apply.Click();

// подождём немного
System.Threading.Thread.Sleep(waitTime);
};

// Проверяем правильность для старого вида рекапчи 2
Action CheckOldView= () => {
// Проверяем, была ли ошибка в распознавании
project.SendInfoToLog("Проверяем правильность", needShowMessages);
HtmlElement he = tab.FindElementByAttribute("div", "class", "fbc-error", "regexp", 0);
if (!he.IsVoid)
{
return;
}

string txt = string.Empty;
// ищем текст, который надо вставить
for (int k = 0; k < tryLoadElement; k++)
{
HtmlElement heGetText = tab.FindElementByAttribute("textarea", "dir", "ltr", "regexp", 0);
if (!heGetText.IsVoid)
{
txt = heGetText.GetAttribute("value");
break;
}
else
{
System.Threading.Thread.Sleep(waitTime); // подождём немного
continue;
}
if (k == (tryLoadElement - 1)) timeout = true;
}

// ищем куда вставлять текст
for (int k = 0; k < tryLoadElement; k++)
{
HtmlElement hePutText = tab.FindElementByAttribute("textarea", "id", "g-recaptcha-response", "regexp", 0);
if (!hePutText.IsVoid)
{
hePutText.SetValue(txt, "None", false);
break;
}
else
{
System.Threading.Thread.Sleep(waitTime); // подождём немного
continue;
}
if (k == (tryLoadElement - 1)) timeout = true;
}

// нажимаем "Подтвердить"
for (int k = 0; k < tryLoadElement; k++)
{
var submit = tab.FindElementByAttribute("input:submit", "fulltag", "input:submit", "regexp", 0);
if (!submit.IsVoid)
{
submit.Click();
break;
}
else
{
System.Threading.Thread.Sleep(waitTime); // подождём немного
continue;
}
if (k == (tryLoadElement - 1)) timeout = true;
}
success = true;
};

// проверим правильность ответа рекапчи 2
Action Check= () => {
project.SendInfoToLog("Проверяем правильность", needShowMessages);
for (int k = 0; k < tryLoadElement; k++)
{
var checkAnswer = tab.FindElementByAttribute("div", "class", "recaptcha-checkbox-checkmark", "regexp", 0);
if (!checkAnswer.IsVoid)
{
if (checkAnswer.OuterHtml.Contains("style=\"\""))
success = true;
else
success = false;
return;
}
if (k == (tryLoadElement - 1)) timeout = true;
System.Threading.Thread.Sleep(waitTime);
}
};

// Кликаем по кнопке я не робот, если она есть
NotRobotClick();
if (success) return "ok";

// Пытаемся распознать рекапчу
for (int i = 0; i < tryRecognize; i++)
{
if (!isRecaptcha1) OpenAudioTask();
if (timeout) break;
GetAudioFile();
if (timeout) break;
Recognize();
if (fileLoadingError)
{
fileLoadingError = false;
continue;
}
if (timeout) break;
InputAnswer();
if (timeout) break;
if (!fileDeleted)
{
if (File.Exists(file))
{
File.Delete(file);
fileDeleted = true;
}
}

if (isRecaptcha1) return "ok";
SubmitAnswer();

if (!needToCheck) return "ok";

if (timeout) break;
if (!isNewView) CheckOldView();
else Check();
if (success) return "ok";
}

if (timeout) throw new Exception("Вышло время ожидания загрузки элемента");
else throw new Exception("Не распознано. Закончились попытки распознать, прежде чем ответ был засчитан");
 

redman

Client
Регистрация
11.03.2016
Сообщения
554
Благодарностей
178
Баллы
43
Так работает или нет?
 

AloneSlamer

Client
Регистрация
29.01.2013
Сообщения
1 404
Благодарностей
362
Баллы
83

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с AloneSlamer какие-либо сделки.

вы скорее всего юзаете очень грязный айпи
 

nonc

Client
Регистрация
15.03.2016
Сообщения
34
Благодарностей
6
Баллы
8
Спасибо всем за помощь, проблему решил, был мой косяк. Помогла ваша подсказка с логами. Переустанавливал программу на новый сервер и забыл указать ключ антикаптчи, так как думал всеравно через хост отправляет на серв капмонстра. А как оказалось для исполнения кода важно чтобы в настройках программы был указан ключ той антикаптчи, наименование которой прописываешь в hosts, без этого каптча не переотправляется.
 
  • Спасибо
Реакции: rostonix

dpilviv

Client
Регистрация
19.05.2015
Сообщения
68
Благодарностей
5
Баллы
8
таже проблема
делаю регер на tumblr.com
пишет в логе не удалось скачать аудиофайл
какая моежт бить причина?
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
таже проблема
делаю регер на tumblr.com
пишет в логе не удалось скачать аудиофайл
какая моежт бить причина?
а аудио само есть? сейчас почти на любых проксях его заменили на другой тип загадок
 

dpilviv

Client
Регистрация
19.05.2015
Сообщения
68
Благодарностей
5
Баллы
8
снипет начал работать
но тепер капча без аудио
как бить?
 

Вложения

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
модуль сделали, будет в следующем релизе капмонстра
 

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 657
Благодарностей
656
Баллы
113

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Зенолаб в ущерб себе подарок всем сделает и выложит на гет запросах что бы забыли пользователи как покупаются лицензионные продукты )))
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Зенолаб в ущерб себе подарок всем сделает и выложит на гет запросах что бы забыли пользователи как покупаются лицензионные продукты )))
не вижу связи между пост гет и отсутствием покупок софта
 
  • Спасибо
Реакции: Roman*

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
не вижу связи между пост гет и отсутствием покупок софта
Ну например я могу в N+ колличество разгадывать на гетах в зависимости от железа не приобретая капмонстра, что примерно запросил ТС я понял
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Ну например я могу в N+ колличество разгадывать на гетах в зависимости от железа не приобретая капмонстра, что примерно запросил ТС я понял
причем тут твоё разгадывание энного количества на гетах?
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
причем тут твоё разгадывание энного количества на гетах?
ну при том если разрабы такое выложут то оно у всех будет, это пример привёл если уж так тяжко понять для чего иметь бесплатное решение и при чём ещё которое не жрёт ресурсы
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
ну при том если разрабы такое выложут то оно у всех будет, это пример привёл если уж так тяжко понять для чего иметь бесплатное решение и при чём ещё которое не жрёт ресурсы
ты не поверишь, но тот сниппет, который не на гетах, он тоже у всех. И его можно модернизировать так, что он будет слать капчи не на монстр, а куда-то еще. И, опять же, не поверишь, энное количество капч в зависимости от железа может проходить мимо капмонстра
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
ты не поверишь но что бы запустить тебе например в 3000 потоков тот снипет который у всех тебе надо в дедик бабла вывалить приличный и приличную сумму
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
ты не поверишь но что бы запустить тебе например в 3000 потоков тот снипет который у всех тебе надо в дедик бабла вывалить приличный и приличную сумму
эти затраты ничто, по сравнению с затратами на пул проксей, который будет себе комфортно чувствовать в таких условиях
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
эти затраты ничто, по сравнению с затратами на пул проксей, который будет себе комфортно чувствовать в таких условиях
Некоторым и рубля жалко в инет выложить, поэтому для них ресурсы важны, мне так вообще до фени, я просто высказал своё мнение зная для чего многие просят гет, а модернизировать тот снипет который у всех что то не все ринулись его переделывать
 

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 657
Благодарностей
656
Баллы
113
Выложат и обрубят твой бизнес по продаже твоего решения на пост гете *HAHA* Это просто твоя жадность не дает тебе покоя)))
 

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