SolveMedia Audio
Пожалуйста, ознакомьтесь с Правилами использования материалов на данном ресурсе
Добавлено в ZennoPoster 5.9.5.1 и CapMonster 2.5.5.0.
В CapMonster2 есть возможность распознавать звуковой вариант каптчи SolveMedia. В программе будет доступен модуль ZennoLab.AudioSolveMedia.
Использование в ZennoPoster
Для отправки звуковых каптч из ZennoPoster Вы можете использовать подготовленный нами сниппет. Код сниппета доступен ниже. Сниппет может периодически обновляться. Следите за изменениями.
// 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");