Инструменты пользователя

Инструменты сайта


Боковая панель

Перевод этой страницы:

ru:addons:capmonster:funcaptcha

FunCaptcha Audio

В программе CapMonster 2, начиная с версии 2.5.0.0 появилась возможность распознавать звуковую funcaptcha. В программе будет доступен модуль ZennoLab.AudioReCaptcha. Работает это так: когда на странице встречается funcaptcha, нужно выбрать распознавание через аудиозапись и отправить ее в CapMonster.

Использование в ZennoPoster

Для отправки аудио версии funcaptcha из ZennoPoster версии более 5.9.5.1 вы можете использовать подготовленный нами сниппет. Код сниппета доступен ниже.

// Основные параметры
 
// время ожидания
var waitTime = 1000;
// количество попыток загрузить элемент
var tryLoadElement = 60;
// показывать сообщения о прогрессе распознавания
var needShowMessages = false;
 
// Вспомогательные переменные
 
// вкладка
var tab = instance.ActiveTab;
// аудио файл
var file = string.Empty;
// файл был удален
var fileDeleted = true;
// ответ на аудио каптчу
var answer = string.Empty;
// время вышло 
var timeout = false;
// ошибка загрузки файла
var fileLoadingError = false;
// cписок урлов скаченных файлов
var usedURLs = new List<string>();  
 
Action OpenAudioForm = () => {
	project.SendInfoToLog("Открываем форму с аудио заданием", needShowMessages);
	for (int k = 0; k < tryLoadElement; k++)
	{
		var audioButton = tab.FindElementByAttribute("span", "class", "fc_meta_audio_btn", "regexp", 0);
		// если нашли
		if (!audioButton.IsVoid)
		{
			// клик по кнопке
			audioButton.Click();
			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++)
	{
		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);
		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];
	} 
	finally 
	{
		if (File.Exists(file)) 
		{
			File.Delete(file);
			fileDeleted = true;
		}
	}
};
 
Action InputAnswer= () => {
	if (!String.IsNullOrEmpty(answer) && answer != "sorry")
	{
		project.SendInfoToLog("Вводим ответ", needShowMessages);
		HtmlElement audioAnswerInput = tab.FindElementByAttribute("input:text", "id", "recaptcha_response_field", "text", 0);
		// если нашли
		if (!audioAnswerInput.IsVoid)
		{
			// вводим ответ
			audioAnswerInput.SetValue(answer, "Full", false);
		}
		// подождём немного
		System.Threading.Thread.Sleep(waitTime);
	}
	else throw new Exception("Ответ не получен");
};
 
// Подтверждаем
Action SubmitAnswer= () => {
	// ищем кнопку "Подтвердить"
	HtmlElement apply = tab.FindElementById("audio_submit");
	if (!apply.IsVoid) apply.Click();
	// подождём немного
	System.Threading.Thread.Sleep(waitTime);
};
 
Action CheckTimeOut= () => {
	if (timeout) throw new Exception("Вышло время ожидания загрузки элемента");
};
 
// Распознаем каптчу
OpenAudioForm();
CheckTimeOut();
GetAudioFile();
CheckTimeOut();
Recognize();
if (fileLoadingError) throw new Exception("error loading file");
CheckTimeOut();
InputAnswer();
CheckTimeOut();
if (!fileDeleted)
{
	if (File.Exists(file))
	{
		File.Delete(file);
		fileDeleted = true;
	}
}
SubmitAnswer();
return "ok";
ru/addons/capmonster/funcaptcha.txt · Последние изменения: 2015/11/23 14:42 — afameless