Помогите с C#

Kinomanius

Активный пользователь
Регистрация
20.01.2020
Сообщения
184
Благодарностей
26
Баллы
28
Нашёл сниппет для обхода
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";
Пробовал на сайте EpicGames если что
 
Последнее редактирование:
Регистрация
05.06.2019
Сообщения
570
Благодарностей
454
Баллы
63
Если не ошибаюсь, но в заголовке, написано (Не поддерживается!)
 

Kinomanius

Активный пользователь
Регистрация
20.01.2020
Сообщения
184
Благодарностей
26
Баллы
28

winchester7

Client
Регистрация
27.07.2011
Сообщения
51
Благодарностей
16
Баллы
8

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)