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

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


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

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

ru:addons:capmonster:sm-audio

Solve Media Audio

В программе CapMonster 2, начиная с версии 2.5.5.0 появилась возможность распознавать звуковой вариант каптчи SolveMedia. В программе будет доступен модуль ZennoLab.AudioSolveMedia

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

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

// Main settings
 
// waiting timeout
var waitTime = 1000;
// attempts to load captcha
var tryLoadElement = 60;
// show recognizing progress messages
var needShowMessages = true;
// folder for saving audio files
var mainAudiofolderName = "sm_audio";
 
// Additional variables
var tab = instance.ActiveTab;
var timeout = false;
var file = string.Empty;
var answer = string.Empty;
var fileLoadingError = false;
var audioFolder = string.Format("{0}\\{1}\\{2}", project.Directory, mainAudiofolderName, Guid.NewGuid().ToString());
 
Action CheckFileDeleting= () => {
	if (File.Exists(file)) File.Delete(file);
	if (Directory.Exists(audioFolder))
	{
		// check directory is empty
		if ((Directory.GetDirectories(audioFolder).Length + Directory.GetFiles(audioFolder).Length) == 0)
			Directory.Delete(audioFolder);
	}
};
 
Action CheckMediaError= () => {
	if (tab.URL.Contains("api.solvemedia.com/media/media-error.gif"))
		throw new Exception("Error loading media");
};
 
Action CheckTimeOut= () => {
	if (timeout) 
		throw new Exception("Timeout of loading element has been exceeded");
};
 
Action OpenAudioForm = () => {
	project.SendInfoToLog("Opening the form with audio task", needShowMessages);
	for (int k = 0; k < tryLoadElement; k++)
	{
		var audioButton = tab.FindElementByAttribute("a", "id", "adcopy-link-audio", "text", 0);
		if (!audioButton.IsVoid)
		{
			audioButton.Click();
			break;
		}
		System.Threading.Thread.Sleep(waitTime);
		CheckMediaError();
		if (k == (tryLoadElement - 1)) timeout = true;
	}
	CheckTimeOut();
};
 
Action GetAudioFile= () => {
	for (int k = 0; k < tryLoadElement; k++)
	{
		var audioButton = tab.FindElementByAttribute("a", "innerhtml", "Download mp3 file", "text", 0);
		if (!audioButton.IsVoid)
		{
			project.SendInfoToLog("Downloading audio file", needShowMessages);
			audioButton.Click();
			break;
		}
		else System.Threading.Thread.Sleep(waitTime);
		CheckMediaError();
		if (k == (tryLoadElement - 1)) timeout = true;
	}
	CheckTimeOut();
};
 
Action Recognize= () => {
	// waiting loading file
	tab.WaitDownloading();
	CheckMediaError();
	file = audioFolder + "\\media.mp3";
	for (int k = 0; k < tryLoadElement; k++)
	{
		if (File.Exists(file)) break;
		else System.Threading.Thread.Sleep(waitTime);
		if (k == (tryLoadElement - 1)) timeout = true;
	}
	CheckTimeOut();
 
	// getting audio bytes
	var bytes = File.ReadAllBytes(file);
	if (bytes.Length < 1024) throw new Exception("Error loading file");
 
	project.SendInfoToLog("Recognizing", needShowMessages);
	string str = Convert.ToBase64String(bytes);
	var rc = ZennoPoster.CaptchaRecognition("CapMonster2.dll", str, "CapMonsterModule=ZennoLab.AudioSolveMedia&ParallelMode=true");
	answer = rc.Split(new [] {"-|-"}, StringSplitOptions.RemoveEmptyEntries)[0];
};
 
Action InputAnswer= () => {
	if (!String.IsNullOrEmpty(answer) && answer != "sorry")
	{
		project.SendInfoToLog("Inserting answer", needShowMessages);
		HtmlElement audioAnswerInput = tab.FindElementByAttribute("input:text", "id", "adcopy_response", "text", 0);
		if (!audioAnswerInput.IsVoid)
		{
			audioAnswerInput.SetValue(answer, "None", false);
		}
		System.Threading.Thread.Sleep(waitTime);
	}
	else throw new Exception("Answer not received");
};
 
// Recognizing captcha
try
{
	instance.DownloadsPath = audioFolder;
	OpenAudioForm();
	GetAudioFile();
	Recognize();
	InputAnswer();
	return "ok";
}
finally
{
	CheckFileDeleting();
}

Замечания по качеству распознавания

Обращаем ваше внимание на необходимость использования качественных проксей. Как и графическая версия данной каптчи, так и звуковая, при многократном обращении начинают сильно искажаться, что делает ее трудно распознаваемой, как для человека, так и для нашей системы. В связи с этим указанный в модуле процент, является относительным. Так при «свежем» IP-адресе процент часто выше заявленного, а после нескольких сотен распознанных каптч начинает снижаться по естественным причинам. Также влияет количество слов, произносимых в аудио записи.

Примечание

Перед загрузкой страницы на которой находится Solve Media и использованием сниппета вам необходимо выключить плагины, иначе не появится ссылка на скачивание аудио файла


Следует обратить внимание на основные параметры выполнения сниппета, которые вы сможете менять под свои нужны: время ожидания загрузки элемента, количество попыток загрузить элемент на странице, папка временного хранения аудио файлов, которая будет создана в директории с вашим проектом

// waiting timeout
var waitTime = 1000;
// attempts to load web element
var tryLoadElement = 60;
// folder for saving audio files
var mainAudiofolderName = "sm_audio";


Функция отправки каптчи на сервис выглядит следующим образом:

ZennoPoster.CaptchaRecognition("CapMonster2.dll", base64StringAudioBytes, "CapMonsterModule=ZennoLab.AudioSolveMedia");
ru/addons/capmonster/sm-audio.txt · Последние изменения: 2015/12/29 15:55 — afameless