Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Info

Добавлено в ZennoPoster 5.9.5.1 и CapMonster 2.5.5.0.

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

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

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

Code Block
languagec#
// 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 и использованием сниппета Вам необходимо выключить плагины, иначе не появится ссылка на скачивание аудио файла.

Image RemovedImage Added

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

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

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

Code Block
ZennoPoster.CaptchaRecognition("CapMonster2.dll", base64StringAudioBytes, "CapMonsterModule=ZennoLab.AudioSolveMedia");