Привет! Пользуюсь твоим шаблоном по разгадке аудио, за который тебе огромнейшенее спасибо! Но иногда при правильной разгадке аудио гугл просит разгадать ещё, и ещё, и ещё, и так может быть до бесконечности. Хотя ответы даю правильные на аудио файл. В чем может быть проблема?Ну потому что изображение скорее всего не может из html кода получить. Надо просто теги смотреть и менять их и всё.
Там ограничение стоит на 5 разгадываний и если за 5 раз не разгадало, выдает ошибку, так что до бесконечности гадать не должноПривет! Пользуюсь твоим шаблоном по разгадке аудио, за который тебе огромнейшенее спасибо! Но иногда при правильной разгадке аудио гугл просит разгадать ещё, и ещё, и ещё, и так может быть до бесконечности. Хотя ответы даю правильные на аудио файл. В чем может быть проблема?
А что дороже разгадывать? аудио или фото рекаптчу?Там ограничение стоит на 5 разгадываний и если за 5 раз не разгадало, выдает ошибку, так что до бесконечности гадать не должно
фотоА что дороже разгадывать? аудио или фото рекаптчу?
Какой из твоих проектов сейчас стабильно отрабатывает ? Продублируй ссылку.
все работает, поэтапно смотрите как сохраняет картинку и что отправляеттестирую ваш скрипт recaptcha2.xmlz
в мониторинге https://rucaptcha.com/statistics/realtime_monitor не вижу присланных капчей,
в чем может быть проблема?
в настройках ZP captcha KEY прописан правильно
http://joxi.ru/ZrJOVYki1LYYEm.jpg
уточните пожалуйста работает сейчас этот скрипт?
У тебя есть кубик в шаблоне на C#, скажи пожалуйста что в него нужно дописать чтобы он передавал 2 параметра в рукапчу recaptchacols иВсем доброго времени суток!
Столкнулся с ситуацией, что мне нужно распознать recaptcha2 от гугла, узнал что это могут делать в рукапче и сразу принялся за поиск на форуме и за его пределами легкого проекта для интеграции себе, или готового сниппета для распознавания. Но, к сожалению, ни один из найденных проектов мне не понравился, потому что он не решал задачу распознания полностью. Если быть точнее, то некоторые проекты вообще не работали или нуждались в очень сильной доработке напильником .
Именно поэтому было решено сделать свой сниппет для отгадывания данного вида капчи, который учел бы все мои желания и превзошел бы все существующие реализации. Такой сниппет, чтобы его можно было запускать как "проект в проекте", чтобы и выложить на форум и показать друзьям не стыдно .
Вот список того, что я реализовал:
- Есть демка, по которой понятно как работает моя реализация.
- Всё работает как подпроект, то есть править вам внутри сниппета ничего не нужно, просто прикрепить кубик "Проект в проекте" и указать путь к этому сниппету.
- Будет отправка русских капч. Конечно, если вы не забудете добавить нужный блок, в демо есть пример, а в самом сниппете описано как и куда их добавлять. (Почему важно отправлять русские капчи? - Потому что работники в ruCaptcha русские, они будут быстрее и правильнее отгадывать их).
- Проект сжимает отправляемое изображение с помощью C#, что позволяет обходить багу с максимальным размером загружаемого файла. Потому что если просто отправлять данную капчу, то она будет размером более разрешенных 400 КБ (потому что zennoposter сохраняет элемент в png-картинку без сжатия).
- Есть проверка на возврат от zenno строки "sorry" (когда что-то при распознавании пошло не так и зенка не дождалась результата).
- Реализована возможность показать скрытую капчу. Recaptcha2 скрывается через 30-40 секунд и если работник долго распознает, то потом при клике на капчу всё отвалится, хотя капча распознана, деньги сняты, работник распознал её правильно, а вы получайте от этого всего батхерд.
- Включена "качественная эмуляция" кликов: иногда при распознании таких капч зенка не кликает по элементам, поэтому получается опять батхерд.
- Сделана коррекция возвращаемых значений, то есть они уменьшаются на 1, т.к. индекс в этой капче от 0, а в рукапче от 1.
- Есть проверка на то, сколько раз уже вводилась капча, чтобы не получилось зацикливания и всё не умерло к чертям, ещё и сожрав кучу денег.
- В сниппете местами расписаны комментарии о том, что происходит - он очень прост к изменению и пониманию.
- Есть проверка на то, что изображение всё таки не нужно распознавать, если IP чистый и в гуглокапче сразу же ставится нужный чекбокс без отображения картинки.
- Сделана проверка всех 3х типов ошибок у капчи с отправкой запроса в рукапчу о том, что капча распознана не правильно. Виды ошибок у рекапчи:
- нужно ввести капчу ещё раз, предыдущая капча была правильная, но гугл думает что это всё равно бот и хочет второй-третий раз правильный ввод (если IP заспамленный). Также такая ошибка бывает при неправильном распознании;
- нужно выбрать ещё 1 изображение на капче, работник не выбрал ещё одно изображение;
- нужно выбрать ещё несколько изображений на капче.
Ну, как?
Заманчиво, не так ли? Так скорее качайте и используйте .
Я специально сделал всё это, чтобы эксклюзивно выложить здесь на форуме .
Ссылка для скачивания: https://yadi.sk/d/kKmmhA8KjgkN6
PS: опубликовал именно в этом разделе, потому что в последнее время раздел "сниппеты" стал больше похож на раздел "вопросы".
продаю, подробности в ссылке в подписиПодскажите шаблон, если есть.
разгадывания рекапчи, которую надо несколько раз нажимать, то есть например спрашивает про "показать витрины магазина", когда нажимаешь на картинку, за ней появляется еще одна.
как такую гадать?
ты почему в чужой теме предлагаешь свои подписи ??продаю, подробности в ссылке в подписи
http://zennolab.com/discussion/threads/recaptcha-2-vs-zennoposter-ili-kak-bot-stal-chelovekom.27680/ вот эти работают на ура.для картинок должен работать шаблон
Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с 25region какие-либо сделки.
http://zennolab.com/discussion/threads/recaptcha-2-vs-zennoposter-ili-kak-bot-stal-chelovekom.27680/ вот эти работают на ура.
Вроде, в этой теме еще было решение, когда каптчу через манки.длл гадать можна. 2 раза пролистал - ничего, поиск тоже не помог. Может кто может направить на путь истинный?
// ==================== Все что нужно настроить ========================================
bool extendAlerts = true; // true - выводить сообщения в лог ZennoPoster
string alertTitleLog = "Google ReCaptcha:"; // Заголовок перед сообщением в логе
string captchaModule = "MonkeyEnter.dll"; // Можно RuCaptcha.dll или MonkeyEnter.dll
int checkElementTimeout = 10; // Время, в течении которого ищем элементы на странице
int captchaLoadTimeout = 5; // Время ожидания загрузки формы с картинками
int checkCaptchaCount = 4; // Количество попыток разгадывания
// =====================================================================================
// ========== Цикл по количеству попыток разгадывания капчи ==========
for (int i = 0; i < checkCaptchaCount; i++)
{
project.SendInfoToLog("Разгадываем капчу. Попытка " + Convert.ToString(i + 1) + "/" + checkCaptchaCount, alertTitleLog, extendAlerts);
// ========== Цикл по времени поиска элемента recaptcha-checkbox на странице ==========
for (int j = 0; j < checkElementTimeout * 2; j++)
{
System.Threading.Thread.Sleep(500);
// ========== Кликаем ReCaptcha checkbox ==========
HtmlElement reCaptcha_checkbox = instance.ActiveTab.FindElementByAttribute("div", "class", "recaptcha-checkbox-checkmark", "regexp", 0);
if (!reCaptcha_checkbox.IsNull && !reCaptcha_checkbox.IsVoid)
{
reCaptcha_checkbox.Click();
break;
}
if (j == checkElementTimeout * 2 - 1)
{
project.SendWarningToLog("Время поиска элемента истекло. Не найден элемент <recaptcha-checkbox>", alertTitleLog, extendAlerts);
throw new Exception();
}
}
// ========== Проверяем нужные элементы после клика ==========
string reCaptcha_isChecked = string.Empty; // Состояние чекбокса. false - значит нужно разгадывать картинки
HtmlElement imgForm = null;
//HtmlElement imgText = null;
string imgText = string.Empty;
bool oldRecaptcha = false;
for (int j = 0; j < checkElementTimeout * 2; j++)
{
System.Threading.Thread.Sleep(500);
// ========== Получаем состояние чекбокса ==========
HtmlElement reCaptcha_checked = instance.ActiveTab.FindElementByAttribute("span", "id", "recaptcha-anchor", "regexp", 0);
if (!reCaptcha_checked.IsNull && !reCaptcha_checked.IsVoid)
{
reCaptcha_isChecked = reCaptcha_checked.GetAttribute("aria-checked");
if (reCaptcha_isChecked == "true")
break;
}
// ========== Ищем форму с картинками на странице ==========
imgForm = instance.ActiveTab.FindElementByAttribute("div", "class", "rc-imageselect-payload", "regexp", 0);
var imgs = instance.ActiveTab.FindElementsByAttribute("div", "class", "rc-imageselect-checkbox", "regexp");
if (!imgs.IsVoid && !imgForm.IsNull && !imgForm.IsVoid && imgs.Count > 0)
{
if (captchaModule == "RuCaptcha.dll" && imgs.Count == 16)
{
imgForm = instance.ActiveTab.FindElementByAttribute("div", "class", "rc-imageselect-challenge", "regexp", 0);
var heText = instance.ActiveTab.FindElementByAttribute("div", "class", "rc-imageselect-desc", "regexp", 0);
imgText = Regex.Replace(heText.GetAttribute("innerhtml"), "<[^>]+>", string.Empty);
if (imgText == "")
{
heText = instance.ActiveTab.FindElementByAttribute("div", "class", "rc-imageselect-desc-no-canonical", "regexp", 0);
imgText = Regex.Replace(heText.GetAttribute("innerhtml"), "<[^>]+>", string.Empty);
}
}
else
{
oldRecaptcha = true;
imgForm = instance.ActiveTab.FindElementByAttribute("div", "class", "rc-imageselect-payload", "regexp", 0);
}
break;
}
}
if (reCaptcha_isChecked != "true")
System.Threading.Thread.Sleep(captchaLoadTimeout * 1000); // Делаем паузу, ждем пока подгрузятся картинки
// ========== Разгадываем капчу ==========
string recognition_Result = string.Empty; // Результат разгадывания
string recognition_WrongCaptcha = string.Empty; // Ссылка для возврата ошибки на сервис RuCaptcha.com
if (reCaptcha_isChecked == "false")
{
// Проверяем попалась ли капча с одной картинкой
if (imgForm.IsVoid)
{
project.SendInfoToLog("Не найдена форма с картинками. Скорее всего вылезла старая капча.", alertTitleLog, extendAlerts);
break;
}
// Снимаем отметки с картинок
var imgs = instance.ActiveTab.FindElementsByAttribute("div", "class", "rc-imageselect-checkbox", "regexp");
if (!imgs.IsVoid)
{
for (int k = 0; k < imgs.Count; k++)
{
string width = imgs.GetByNumber(k).GetAttribute("width");
if (width != "" && width != "0")
imgs.GetByNumber(k).Click();
}
}
// Скриним форму с картинками и конвертируем в jpg
string attribute = imgForm.DrawToBitmap(false);
MemoryStream ms = new System.IO.MemoryStream(Convert.FromBase64String(attribute));
Image bmp = new Bitmap(ms);
var msJpeg = new System.IO.MemoryStream();
string jpeg = string.Empty;
if (captchaModule == "MonkeyEnter.dll" || oldRecaptcha)
{
bmp.Save(msJpeg, System.Drawing.Imaging.ImageFormat.Jpeg);
}
else
{
Image imgNew = new Bitmap(600, 600);
var g = Graphics.FromImage(imgNew);
g.DrawImage(bmp, 0, 0, 600, 600);
g.Dispose();
imgNew.Save(msJpeg, System.Drawing.Imaging.ImageFormat.Jpeg);
imgNew.Dispose();
}
jpeg = Convert.ToBase64String(msJpeg.ToArray());
bmp.Dispose();
// Отправляем на распознавание
project.SendInfoToLog("Отправляем данные на сервис распознавания", alertTitleLog, extendAlerts);
string answer = string.Empty;
if (captchaModule == "MonkeyEnter.dll" || oldRecaptcha)
answer = ZennoPoster.CaptchaRecognition(captchaModule, jpeg, "id_constructor=23");
else
answer = ZennoPoster.CaptchaRecognition(captchaModule, jpeg, "textinstruction=" + imgText + "&recaptcha=1");
// Приводим результат распознавания к нужному виду
if (captchaModule == "RuCaptcha.dll")
{
// Разделяем ответ от RuCaptcha и складыванем в переменные
var split = answer.Split(new [] { "-|-" }, StringSplitOptions.RemoveEmptyEntries);
if (split.Length == 2)
{
recognition_Result = split[0];
recognition_WrongCaptcha = split[1];
}
else
{
project.SendInfoToLog("Error: не удалось разгадать капчу", alertTitleLog, extendAlerts);
continue;
}
// Проверяем ответ sorry
if (recognition_Result == "sorry")
{
project.SendInfoToLog("Капча не распознана. RuCaptcha: sorry", alertTitleLog, extendAlerts);
continue;
}
// Обрезаем начало ответа, оставляем только номера картинок, разделенные /
recognition_Result = Regex.Match(recognition_Result, @"(?<=click:).*").Value;
}
else
recognition_Result = answer;
// Отображаем скрывшуюся капчу
var e = instance.ActiveTab.FindElementByAttribute("div", "outerhtml", "z-index: 20000000", "regexp", 0);
e.SetAttribute("style", "display: block; visibility: visible; position: absolute; width: 414px; left: 0px; top: 0px; height: 600px; z-index: 2000000000;");
// ===== Кликаем =====
do
{
// Выдераем номера картинок и кликаем по ним
// Проверяем тип ответа
string img_split = Regex.Match(recognition_Result, @"/").Value;
if (img_split != "")
{
if (Regex.Match(recognition_Result, @"/$").Value == "")
recognition_Result += "/";
img_split = Regex.Match(recognition_Result, @"^\d{1,2}(?=/)").Value;
if (img_split == "")
img_split = Regex.Match(recognition_Result, @"^\d{1,2}").Value;
if (img_split == "")
recognition_Result = Regex.Match(recognition_Result, @"(?<=^/).*").Value; // обрезаем разделитель / в начале строки
else
{
recognition_Result = Regex.Match(recognition_Result, @"(?<=^\d{1,2}/).*").Value; // обрезаем число и разделитель / в начале строки
}
}
else
{
img_split = Regex.Match(recognition_Result, @"^\d{1}").Value;
recognition_Result = Regex.Match(recognition_Result, @"(?<=^\d{1}).+").Value;
}
// Получаем картинку и кликаем
string width = "0";
HtmlElement img = instance.ActiveTab.FindElementByAttribute("img", "class", "rc-image-tile-4", "regexp", Convert.ToInt32(img_split) - 1);
if (img.IsVoid)
{
img = instance.ActiveTab.FindElementByAttribute("div", "class", "rc-image-tile-target", "regexp", Convert.ToInt32(img_split) - 1);
if (img.IsVoid)
img = instance.ActiveTab.FindElementByAttribute("div", "class", "rc-image-tile-wrapper", "regexp", Convert.ToInt32(img_split) - 1);
}
img.Click();
System.Threading.Thread.Sleep(500);
}
while (recognition_Result != "");
// ========= Подтверждаем =========
var verify_button = instance.ActiveTab.FindElementByAttribute("div", "id", "recaptcha-verify-button", "regexp", 0);
if (!verify_button.IsVoid && !verify_button.IsNull)
{
verify_button.Click();
}
// ========== Проверяем разгадали ли ==========
string captchaError = string.Empty; // Тип ошибки
reCaptcha_isChecked = string.Empty; // Состояние чекбокса. false - значит нужно разгадывать картинки
for (int j = 0; j < 10; j++)
{
System.Threading.Thread.Sleep(500);
// Получаем состояние чекбокса
HtmlElement reCaptcha_checked = instance.ActiveTab.FindElementByAttribute("span", "id", "recaptcha-anchor", "regexp", 0);
if (!reCaptcha_checked.IsNull && !reCaptcha_checked.IsVoid)
{
reCaptcha_isChecked = reCaptcha_checked.GetAttribute("aria-checked");
if (reCaptcha_isChecked == "true")
break;
}
string textDom = instance.ActiveTab.DomText;
// Получаем ошибку
captchaError = Regex.Match(textDom, @"(?<=<div\ class=""rc-imageselect-error-select-one""\ style="").*?(?="">)").Value;
if (captchaError == "")
{
captchaError = "1";
break;
}
captchaError = Regex.Match(textDom, @"(?<=<div\ class=""rc-imageselect-error-select-more""\ style="").*?(?="">)").Value;
if (captchaError == "")
{
captchaError = "2";
break;
}
captchaError = Regex.Match(textDom, @"(?<=<div\ class=""rc-imageselect-incorrect-response""\ style="").*?(?="">)").Value;
if (captchaError == "")
{
captchaError = "3";
break;
}
}
// ========= Отправляем ошибки на RuCaptcha =========
if (reCaptcha_isChecked == "false")
{
if (captchaModule == "RuCaptcha.dll")
ZennoPoster.HttpGet(recognition_WrongCaptcha, "", "UTF-8", ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly, 30000, "", "", true, 5, AdditionalHeaders: new [] {"Referer: "+ ""});
if (captchaError == "1")
project.SendInfoToLog("Капча разгадана не верно! Нужно указать еще одно изображение.", alertTitleLog, extendAlerts);
if (captchaError == "2")
project.SendInfoToLog("Капча разгадана не верно! Нужно указать больше изображений.", alertTitleLog, extendAlerts);
if (captchaError == "3")
project.SendInfoToLog("Капча разгадана не верно! Нужно попытаться еще.", alertTitleLog, extendAlerts);
continue;
}
}
// ========= Все ОК =========
project.SendInfoToLog("Капча успешно разгадана!", alertTitleLog, extendAlerts);
return "ok";
}
// Количество попыток разгадывания превышено, завершаем экшен по неудаче
throw new Exception();
нет, через манки.длл я не делал, там только через рукапчу, так как на ней есть поддержка ответа, что капча решенаhttp://zennolab.com/discussion/threads/recaptcha-2-vs-zennoposter-ili-kak-bot-stal-chelovekom.27680/ вот эти работают на ура.
Вроде, в этой теме еще было решение, когда каптчу через манки.длл гадать можна. 2 раза пролистал - ничего, поиск тоже не помог. Может кто может направить на путь истинный?
А как быть с тем, что когда отгадывает - появляются ещё варианты ответов?Там изменения на кнопке подтверждения. Вместо div теперь button.