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

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


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

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

ru:addons:capmonster:areyouhumancaptcha

AreYouHuman Audio

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

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

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

// Основные параметры
 
// время ожидания
var waitTime = 1000;
// время ожидания загрузки canvas
var waitTimeCanvas = 2000;
// количество попыток загрузить элемент
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("Ожидаем загрузки объекта canvas", needShowMessages);
	for (int k = 0; k < tryLoadElement; k++)
	{
		// Определяем область для клика
		var canvas = tab.FindElementById("ayah-canvas-fg");
		if (!canvas.IsVoid)
		{
			System.Threading.Thread.Sleep(waitTimeCanvas);
			var p = canvas.DisplacementInTabWindow;
			var x1 = p.X + 312;
			var x2 = p.X + 316;
			var y1 = p.Y + 141;
			var y2 = p.Y + 148;
			// Выбираем случайную точку
			Random random = new Random();
			var x = random.Next(x1, x2);
			var y = random.Next(y1, y2);
			// Кликаем
			tab.MouseClick(x, y, "Left", "click");
			break;
		}
		else System.Threading.Thread.Sleep(waitTime);
		if (k == (tryLoadElement - 1)) timeout = true;
	}
};
 
// скачиваем mp3-файл
Action GetAudioFile= () => {
	var href = String.Empty;
	project.SendInfoToLog("Получаем аудио задание", needShowMessages);
	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;
		}
		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= () => {
	project.SendInfoToLog("Вводим ответ", needShowMessages);
	if (!String.IsNullOrEmpty(answer) && answer != "sorry")
	{
		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.FindElementByAttribute("input:submit", "fulltag", "input:submit", "text", 0);
	if (!apply.IsVoid) apply.Click();
	// подождём немного
	System.Threading.Thread.Sleep(waitTime);
};
 
Action CheckTimeOut= () => {
	if (timeout) throw new Exception("Вышло время ожидания загрузки элемента");
};
 
// Распознаем каптчу
OpenAudioForm();
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/areyouhumancaptcha.txt · Последние изменения: 2015/11/23 14:45 — afameless