- Регистрация
- 20.01.2020
- Сообщения
- 184
- Благодарностей
- 26
- Баллы
- 28
Нашёл сниппет для обхода
FunCaptcha Audio
Для использования в "ZennoPoster версии более 5.9.5.1 " но не могу понять как им пользоваться. Зашёл на страницу с капчей, нажал кнопку верефикации появилась капча и кнопка перехода на аудио, а потом всё, сниппет выдаёт ошибку.
Пробовал на сайте EpicGames если что
FunCaptcha Audio
Для использования в "ZennoPoster версии более 5.9.5.1 " но не могу понять как им пользоваться. Зашёл на страницу с капчей, нажал кнопку верефикации появилась капча и кнопка перехода на аудио, а потом всё, сниппет выдаёт ошибку.
C#:
// Основные параметры
// время ожидания
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";
Последнее редактирование: