Релиз Новый тестовый билд 5.9.7.0 для желающих)

zennoX

Client
Регистрация
05.04.2014
Сообщения
482
Благодарностей
131
Баллы
43
Кому надо - тот всегда сообразит какая была логика работы шаба, как ни прячь ))) Опять же фидлер ещё никто не отменял :-)
вот именно, кому надо,
для остальных скрыть)
 

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
378
Баллы
63
ну тогда не продавай шаблонов - продавай их результат!
 
  • Спасибо
Реакции: Gfoblin и Ribas

zennoX

Client
Регистрация
05.04.2014
Сообщения
482
Благодарностей
131
Баллы
43

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
378
Баллы
63
Ну ити тебе на 3 букви куда мне предложил.
Не хами !
А по поводу совета это не сарказм а реальный совет.
Скривить ты не сможешь даже от зеленых новичков.
 

zennoX

Client
Регистрация
05.04.2014
Сообщения
482
Благодарностей
131
Баллы
43
Ну ити тебе на 3 букви куда мне предложил.
Не хами !
А по поводу совета это не сарказм а реальный совет.
Скривить ты не сможешь даже от зеленых новичков.
Я не предлагал, раз туда пошел, значит на это себя и ценишь.

А про сарказм, топик про билд, флудить не надо.
продавайте там свои регистраторы, боксы или результаты, я в ваши дела не лезу, и вы не лезьте со своими советами.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 706
Баллы
113
Закончили холиварить
 

tatarin

Client
Регистрация
28.10.2012
Сообщения
795
Благодарностей
131
Баллы
43
Вообщем обновился до 5.9.7.0, капмонстр 2.5.5.1! Перестала работать аудикаптча!
Вот такие ошибки:
Тип Время Сообщение
09:51:25 127.0.0.0 module Не получен ответ на запрос http://127.0.0.0/in.php. Error: Невозможно соединиться с удаленным сервером

Тип Время Сообщение
09:51:46 127.0.0.0 module Не получен ответ на запрос http://127.0.0.0/in.php. Error: Невозможно соединиться с удаленным сервером

Тип Время Сообщение
09:51:46 Выполнение действия CSharp OwnCode Ответ не получен

Код вот такой использую, взят отсюда http://zennolab.com/wiki/ru:addons:capmonster:rc-audio

Код:
// Основные параметры
// время ожидания
var waitTime = 1000;
// количество попыток распознать
var tryRecognize = 2;
// количество попыток загрузить элемент
var tryLoadElement = 60;
// Вспомогательные переменные
// вкладка
var tab = instance.ActiveTab;
// поздравляем, вы не робот
var success = false;
// аудио файл
var file = string.Empty;
// файл был удален
var fileDeleted = true;
// ответ на аудио каптчу
var answer = string.Empty;
// новый вид рекаптчи 2
var isNewView = true;
// рекаптча 1
var isRecaptcha1 = false;
// время вышло
var timeout = false;
// ошибка загрузки файла
var fileLoadingError = false;
// поиск кнопки открытия формы с аудио заданием
Action TryOpenAudioForm = () => {
    for (int k = 0; k < tryLoadElement; k++)
    {
        var audioButton = tab.FindElementByAttribute("div", "id", "recaptcha-audio-button", "regexp", 0);
        // если нашли
        if (!audioButton.IsVoid)
        {
            // клик по кнопке
            audioButton.Click();
            break;
        }
        System.Threading.Thread.Sleep(waitTime); // подождём немного
        if (k == (tryLoadElement - 1)) timeout = true;
    }
    System.Threading.Thread.Sleep(waitTime); // подождём немного
};
// открытие аудиозадания
Action OpenAudioTask= () => {
    if (isNewView)
    {
        //проверяем тип задания формы
        var task = tab.FindElementByAttribute("div", "class", "rc-imageselect-desc-wrapper", "regexp", 0);
        if (!task.IsVoid) TryOpenAudioForm(); // найдено графическое задание, значит открываем аудио
    }
    else
    {
        var elem = tab.FindElementByAttribute("input:submit", "class", @"fbc-button-audio fbc-button", "regexp", 0);
        if (!elem.IsVoid) elem.Click();
    }
};
// Определение версии рекапчи
Action NotRobotClick= () => {
    for (int k = 0; k < tryLoadElement; k++)
    {
        // поиск кнопки "Я не робот"
        var notRobot = tab.FindElementByAttribute("div", "class", "recaptcha-checkbox-checkmark", "regexp", 0);
        // если нашли
        if (!notRobot.IsVoid)
        {
            // клик по кнопке
            notRobot.Click();
            // подождём немного
            System.Threading.Thread.Sleep(waitTime);
            // если ввод каптчи не требуется
            var check = tab.FindElementByAttribute("div", "class", "recaptcha-checkbox-checkmark", "regexp", 0);
            if (!check.IsVoid)
            {
                if (check.OuterHtml.Contains("style=\"\""))
                {
                    success = true;
                    break;
                }
            }
            // Ждем пока загрузится форма
            for (int j = 0; j < tryLoadElement; j++)
            {
                var loadedForm = tab.FindElementByAttribute("div", "class", "primary-controls", "regexp", 0);
                if (!loadedForm.IsVoid) break;
                else System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
                if (j == (tryLoadElement - 1)) timeout = true;
            }
            break;
        }
        else
        {
            // проверяем наличие аудио кнопки рекаптчи 1
            HtmlElement r1 = tab.FindElementById("recaptcha_switch_audio");
            if (!r1.IsVoid)
            {
                r1.Click();
                isRecaptcha1 = true;
                break;
            }
            // проверяем вид рекаптчи2
            var elem = tab.FindElementByAttribute("input:submit", "class", @"fbc-button-audio fbc-button", "regexp", 0);
            if (!elem.IsVoid)
            {
                isNewView = false;
                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++)
    {
        if (isRecaptcha1)
        {
            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);
        }
        else
        {
            if (isNewView)
            {
                var audioChallenge = tab.FindElementByAttribute("a", "class", "rc-audiochallenge-download-link", "regexp", 0);
                // если нашли, получаем ссылку на аудио файл
                if (!audioChallenge.IsVoid)
                {
                    href = audioChallenge.GetAttribute("href");
                    break;
                }
                else System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
            }
            else
            {
                var audioChallenge = tab.FindElementByAttribute("audio", "class", "fbc-audio-controls", "regexp", 0);
                // если нашли, получаем ссылку на аудио файл
                if (!audioChallenge.IsVoid)
                {
                    href = audioChallenge.FindChildByAttribute("source", "src", ".mp3", "text", 0).GetAttribute("src");
                    href = "https://www.google.com" + href;
                    break;
                }
                else System.Threading.Thread.Sleep(waitTime); // подождём загрузки элемента
            }
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }
    // скачиваем файл
    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= () => {
    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")
    {
        HtmlElement audioAnswerInput = null;
        // ищем поле для ввода ответа
        if (isRecaptcha1)
        {
            audioAnswerInput = tab.FindElementByAttribute("input:text", "id", "recaptcha_response_field", "text", 0);
        }
        else
        {
            if (isNewView) audioAnswerInput = tab.FindElementByAttribute("input:text", "id", "audio-response", "regexp", 0);
            else audioAnswerInput = tab.FindElementByAttribute("input:text", "id", "response", "text", 0);
        }
        // если нашли
        if (!audioAnswerInput.IsVoid)
        {
            // вводим ответ
            audioAnswerInput.SetValue(answer, "None", false);
        }
        // подождём немного
        System.Threading.Thread.Sleep(waitTime);
    }
    else throw new Exception("Ответ не получен");
};
// Подтверждаем
Action SubmitAnswer= () => {
    // ищем кнопку "Подтвердить"
    HtmlElement apply = null;
    if (isNewView) apply = tab.FindElementById("recaptcha-verify-button");
    else apply = tab.FindElementByAttribute("div", "class", "fbc-button-verify", "regexp", 0).FindChildByAttribute("input:submit", "fulltag", "input:submit", "text", 0);
    if (!apply.IsVoid) apply.Click();
    // подождём немного
    System.Threading.Thread.Sleep(waitTime);
};
// Проверяем правильность для старого вида рекапчи 2
Action CheckOldView= () => {
    // Проверяем, была ли ошибка в распознавании
    HtmlElement he = tab.FindElementByAttribute("div", "class", "fbc-error", "regexp", 0);
    if (!he.IsVoid)
    {
        return;
    }
    string txt = string.Empty;
    // ищем текст, который надо вставить
    for (int k = 0; k < tryLoadElement; k++)
    {
        HtmlElement heGetText = tab.FindElementByAttribute("textarea", "dir", "ltr", "regexp", 0);
        if (!heGetText.IsVoid)
        {
            txt = heGetText.GetAttribute("value");
            break;   
        }
        else
        {
            System.Threading.Thread.Sleep(waitTime); // подождём немного
            continue;
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }
    // ищем куда вставлять текст
    for (int k = 0; k < tryLoadElement; k++)
    {
        HtmlElement hePutText = tab.FindElementByAttribute("textarea", "id", "g-recaptcha-response", "regexp", 0);
        if (!hePutText.IsVoid)
        {
            hePutText.SetValue(txt, "None", false);
            break;   
        }
        else
        {
            System.Threading.Thread.Sleep(waitTime); // подождём немного
            continue;
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }
    // нажимаем "Подтвердить"
    for (int k = 0; k < tryLoadElement; k++)
    {
        var submit = tab.FindElementByAttribute("input:submit", "fulltag", "input:submit", "regexp", 0);
        if (!submit.IsVoid)
        {
            submit.Click();
            break;
        }
        else
        {
            System.Threading.Thread.Sleep(waitTime); // подождём немного
            continue;
        }
        if (k == (tryLoadElement - 1)) timeout = true;
    }
    success = true;
};
// проверим правильность ответа рекапчи 2
Action Check= () => {
    var checkAnswer = tab.FindElementByAttribute("div", "class", "recaptcha-checkbox-checkmark", "regexp", 0);
    if (!checkAnswer.IsVoid)
    {
        if (checkAnswer.OuterHtml.Contains("style=\"\""))
            success = true;
    }
};
// Кликаем по кнопке я не робот, если она есть
NotRobotClick();
if (success) return "ok";
// Пытаемся распознать рекапчу
for (int i = 0; i < tryRecognize; i++)
{
    if (!isRecaptcha1) OpenAudioTask();
    if (timeout) break;
    GetAudioFile();
    if (timeout) break;
    Recognize();
    if (fileLoadingError)
    {
        fileLoadingError = false;
        continue;
    }
    if (timeout) break;
    InputAnswer();
    if (timeout) break;
    if (!fileDeleted)
    {
        if (File.Exists(file))
        {
            File.Delete(file);
            fileDeleted = true;
        }
    }
    if (isRecaptcha1) return "ok";
    SubmitAnswer();
    if (timeout) break;
    if (!isNewView) CheckOldView();
    else Check();
    if (success) return "ok";
}
if (timeout) throw new Exception("Вышло время ожидания загрузки элемента");
else throw new Exception("Не распознано");
Вчера все на 5.9.5.1 работало, на 5.9.7.0 нет. В чем может быть проблема? С сишарпом не знаком!
 

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
Билд супер, есть вопросы:
[+] Добавлен режим работы проекта “Браузер без отображения содержимого”. Пока в режиме beta, в данном режиме работает практически все кроме плагинов, типа Flash. Отключает рендеринг, позволяет экономить ресурсы памяти и CPU.
1. Что происходит если капчу надо распознать? Детально, меня интересует рендерится вся страница целиком или участок выделенный где капча
2. Возможно ли сделать рендеринг если мне надо посмотреть что там? Например это удобно в случае ошибки - чтобы по скрину сразу понять

[*] Исправлено обновление проекта по symbolic ссылке.
За это отдельная благодарность. Теперь шаблоны отправятся в криптованный контейнер, а в системе будут лежать только символьные ссылки на них, очень удобно и приватно.
 
  • Спасибо
Реакции: APXOHT и Ribas

darkdiver

Administrator
Команда форума
Регистрация
13.01.2009
Сообщения
2 284
Благодарностей
2 728
Баллы
113
Вообщем обновился до 5.9.7.0, капмонстр 2.5.5.1! Перестала работать аудикаптча!
Вот такие ошибки:
Тип Время Сообщение
09:51:25 127.0.0.0 module Не получен ответ на запрос http://127.0.0.0/in.php. Error: Невозможно соединиться с удаленным сервером

Тип Время Сообщение
09:51:46 127.0.0.0 module Не получен ответ на запрос http://127.0.0.0/in.php. Error: Невозможно соединиться с удаленным сервером

Тип Время Сообщение
09:51:46 Выполнение действия CSharp OwnCode Ответ не получен

Код вот такой использую, взят отсюда http://zennolab.com/wiki/ru:addons:capmonster:rc-audio

Вчера все на 5.9.5.1 работало, на 5.9.7.0 нет. В чем может быть проблема? С сишарпом не знаком!
проверим, должно работать, мы же сами тестируем у себя на последних билдах все.
но судя по ошибкам у вас CapMonster как-то криво запустился, выключите обе программы и перезапустите компьютер.

Билд супер, есть вопросы:
1. Что происходит если капчу надо распознать? Детально, меня интересует рендерится вся страница целиком или участок выделенный где капча
2. Возможно ли сделать рендеринг если мне надо посмотреть что там? Например это удобно в случае ошибки - чтобы по скрину сразу понять
1. если капчу можно из кеша браузера достать, то ничего не надо рендерить она напрямую оттуда пойдет. если капчу нельзя достать то рендериться только участок с капчой.
2. ну как раньше рендерили body как картинку и смотрели в чем проблема, так же и тут, делаем скриншот страницы через действия с изображениями и смотрим.
 
  • Спасибо
Реакции: CSS и Ribas

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 380
Благодарностей
467
Баллы
83
Выполняем в PM шаблон с отключённым отображением инстанса, закрываем шаб, открываем другой, в котором браузер включён. Как заставить браузер отображать содержимое без нажатия кнопки "С начала"?
 

darkdiver

Administrator
Команда форума
Регистрация
13.01.2009
Сообщения
2 284
Благодарностей
2 728
Баллы
113
никак
 

darkdiver

Administrator
Команда форума
Регистрация
13.01.2009
Сообщения
2 284
Благодарностей
2 728
Баллы
113
это 2 разных браузера
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 380
Благодарностей
467
Баллы
83
Не совсем удобно. Может при открытии шаба сразу же переключаться на нужный браузер в зависимости от настроек шаблона?
 

darkdiver

Administrator
Команда форума
Регистрация
13.01.2009
Сообщения
2 284
Благодарностей
2 728
Баллы
113
ну так в PM браузер всегда один был, мы же не меняем браузер, когда он видимый, при переключении между проектами.
скорее всего сделаем отдельную кнопку, типа
вернуться к браузеру с отображением.
 
  • Спасибо
Реакции: Ribas

APXOHT

Client
Регистрация
27.12.2013
Сообщения
879
Благодарностей
189
Баллы
43
проверим, должно работать, мы же сами тестируем у себя на последних билдах все.
но судя по ошибкам у вас CapMonster как-то криво запустился, выключите обе программы и перезапустите компьютер.
Пробовали. Тиккет открыт на почте сапорта с диагностик репортом.
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 327
Благодарностей
5 429
Баллы
113
Не получилось Билда 5.8.0.2 обновиться :(

Ключевая фраза в заголовке темы "для желающих" - на нее были все надежды
 
  • Спасибо
Реакции: Gfoblin

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
Change Log:
[+] Улучшен конструктор регулярных выражений, теперь он показывает совпадения по группам, можно выделять только необходимые результаты парсинга для копирования в буфер обмена.
Как это можно использовать? Не понимаю контекста, вкладка "группы" отображает тоже самое что и вкладка "совпадения"

PS: Супер работает! Кто не понял делаем так:
Код:
([a-z])([a-z])
Затем наблюдаем вот это:
ZennoLab discussions.png

@darkdiver теперь вопрос, взяли мы эти группы, а как с ними работать? В обычных регулярках, например в NP++ можно сделать "\1" и мы получим значение которое было в скобках круглых, а тут как?

Change Log:
[+] Добавлены настройки логирования. Через C# код, свойство project.LogOptions.LogFile позволяет установить путь к файлу лога выполнения проекта, а свойство project.LogOptions.SplitLogByThread позволяет включить автоматическое разделение лога по потокам, при установке свойству значения true, файл лога начинает именоваться в формате “путь к файлу.N.расширение”, где N - id потока выполнения.
Низкий поклон! Только ссылка кривая, вот правильная. Я опасаюсь - тут как пишутся данные, как в список (с кэшированием) или напрямую запись строки в файл? Опасаюсь создать излишнюю нагрузку на диск при многопоточности.

Change Log:
[*] Исправлено обновление проекта по symbolic ссылке.
Как оно на деле работает? Механизм нужен, помнится you писали что это очень сложно запилить, нужны детали как выкрутились

PS: Билд от бога!
PSS: Новый билд - реактивный в плане GUI, работать стало ещё более комфортней
 
Последнее редактирование:
  • Спасибо
Реакции: LightWood и APXOHT

tatarin

Client
Регистрация
28.10.2012
Сообщения
795
Благодарностей
131
Баллы
43
проверим, должно работать, мы же сами тестируем у себя на последних билдах все.
но судя по ошибкам у вас CapMonster как-то криво запустился, выключите обе программы и перезапустите компьютер.
Не помогает!
 

darkdiver

Administrator
Команда форума
Регистрация
13.01.2009
Сообщения
2 284
Благодарностей
2 728
Баллы
113
@@darkdiver теперь вопрос, взяли мы эти группы, а как с ними работать? В обычных регулярках, например в NP++ можно сделать "\1" и мы получим значение которое было в скобках круглых, а тут как?
отвечу скрином
upload_2016-1-11_12-19-15.png


Низкий поклон! Только ссылка кривая, вот правильная. Я опасаюсь - тут как пишутся данные, как в список (с кэшированием) или напрямую запись строки в файл? Опасаюсь создать излишнюю нагрузку на диск при многопоточности.
спасибо, исправим ссылку


Как оно на деле работает? Механизм нужен, помнится you писали что это очень сложно запилить, нужны детали как выкрутились
ну написали 10 килобайт кода :-)



в настройках капч удалите, и перезапустите постер.
upload_2016-1-11_12-28-18.png
 
  • Спасибо
Реакции: CSS

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113

darkdiver

Administrator
Команда форума
Регистрация
13.01.2009
Сообщения
2 284
Благодарностей
2 728
Баллы
113
Низкий поклон! Только ссылка кривая, вот правильная. Я опасаюсь - тут как пишутся данные, как в список (с кэшированием) или напрямую запись строки в файл? Опасаюсь создать излишнюю нагрузку на диск при многопоточности.
через NLog пишется все, там есть внутренние буферы, должно нормально работать.
 
  • Спасибо
Реакции: CSS

jslby

Client
Регистрация
02.01.2016
Сообщения
77
Благодарностей
5
Баллы
8
А когда билд будет стабилен и доступен через ЛК?
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 380
Благодарностей
467
Баллы
83
Да вроде нормально работает, можно пробовать устанавливать :-)
 

Severip

Client
Регистрация
17.10.2013
Сообщения
346
Благодарностей
98
Баллы
28
Отличный билд, спасибо!
 

jslby

Client
Регистрация
02.01.2016
Сообщения
77
Благодарностей
5
Баллы
8
Для использования скрытия браузера, необходимо ли что бы ZennoPoster был данного билда?
 

Max

Client
Регистрация
17.06.2012
Сообщения
168
Благодарностей
44
Баллы
28
а когда релиз то?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 450
Благодарностей
8 678
Баллы
113

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 706
Баллы
113

tatarin

Client
Регистрация
28.10.2012
Сообщения
795
Благодарностей
131
Баллы
43

ya-maker

Client
Регистрация
17.04.2012
Сообщения
111
Благодарностей
58
Баллы
28
Еще будут билды или этот финальный?
 

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