Усовершенствование recapcha v2



  • Всем привет. То, что есть круто но ну не совсем идеально. Я тоже пытался ( или может пытаюсь) разработать эмулятор браузера и моя главная задача была это борьба против рекапчи. Моя единственная проблема, это то что я не смог с имитировать клик по кнопке подтверждения (меня это сильно расстроило так как это единственное, что стоит перед финишом). Так как браузер, не знаю как у меня но при отправке на сервер отправляет ВСЮ форму, а ответ приходит в координатах это не айс. Использовал TChromium
    Лично я делал так:

    HTTP.Request.URL := frame.Url;
    MS := TMemoryStream.Create;
    HTTP.Get(request.Url,MS);
    JPEG.LoadFromStream(MS);
    

    Ну и так далее. Таким образом я получал картинку для прохождения. Текст инстракшн извлекал таким методом.

    Code.Add('var X = document.getElementsByClassName("rc-imageselect-desc-no-canonical")[0].innerHTML;');  Code.Add('console.log(X);');frame.ExecuteJavaScript(Code.Text,'about:blank',0);
    

    Ну размер сетки определяется довольно просто. Закинуть запрос (я делал на рукапчу) тоже легко. Обработать его тоже легко. Чтобы нажать на нужные картинки я использовал что-то такое.

    Code.Add('document.getElementsByClassName("rc-image-tile-wrapper")['+
    IntToStr(I)+'].click();');
    frame.ExecuteJavaScript(Code.Text,'about:blank',0);

    Где I нужный элемент.

    Если что могу поделится исходником. Надеюсь что эта штука реально поможет.

    P.S. Да-да, мне тоже стыдно что писал на паскале



  • @anonymouls

    Моя единственная проблема, это то что я не смог с имитировать клик по кнопке подтверждения

    я использую для клика по элементу не яваскриптовую функцию, а нативную CefBrowserHost::SendMouseClickEvent, возможно в этом проблема

    Остальной код чем-то схожий. Ну и движок одинаковый.

    Если что могу поделится исходником. Надеюсь что эта штука реально поможет.

    Если вы хотите улучшить существующий модуль, вы можете форкнуть репозиторий и создать пул реквест. Я буду благодарен любой помощи. Фактически весь код для рекапчи находится в этом файле:
    https://github.com/bablosoft/BAS/blob/master/Modules/ReCaptcha2/js/captcha2_code.js

    Я только не понял в чем вопрос, что не работает и что вы хотите улучшить?



  • Ну из меня программист так себе, так что не удивительно, что я слился на таком этапе, а вообще мной движет только то, что капча распознается как кликовая (т.е. делается скриншот и заливается на сервер, а в ответ получаются координаты, а не номер элементов, с которыми нужно работать). Собственно отсюда у меня вытекало 2 косяка:

    • Скрипт ловил окно со сдвигом (либо не видно куска инструкций, либо поля ввода).

    • Модерирование капчи при жалобе происходит не в пользу отправителя.

    Собственно, если бы капча заливалась по крутому (с наложением сетки), а клику по элементу происходили непосредственно, то шанс возможной ошибки был бы меньше.
    У меня не работала только нажатие кнопки "Подтвердить" средствами js (перебрал вроде все). Единственное, что я не пробовал это действительно нативный клик (пробовал winapi sendmessage, который тоже провалился с треском), на днях попробую проверить.

    Более краткий ответ на вопрос: я бы хотел улучшить алгоритм ввода капчи.

    По-поводу форка: если разберусь как там все работает, то сделаю, что нужно.



  • @anonymouls said:

    Читаю ваш пост и не могу понять, вы про мой скрипт, или про свой?

    (т.е. делается скриншот и заливается на сервер, а в ответ получаются координаты, а не номер элементов, с которыми нужно работать)

    в rucaptcha координаты, в остальных сервисах - номера элементов.

    Скрипт ловил окно со сдвигом (либо не видно куска инструкций, либо поля ввода).

    попробуйте увеличить окно браузера.

    (пробовал winapi sendmessage, который тоже провалился с треском)

    У движка, который мы используем есть функция SendMouseClickEvent.



  • Про ваш скрипт конечно. Значит проблема не в самом алгоритме, а в том, что нужный алгоритм для рукапчи еще не прикрутили? Я вот сегодня сделал еще 3 попытки распознания капчи на рукапче и все зафейлились. Не знаю либо мне так не прет, либо все 3 раза на сервисе мой запрос просто не смогли выполнить, хотя я потом проверил все точки нажатий самостоятельно, в результате можно сказать, что на сервисе кликнули правильно.

    Увеличивание окна браузера не особо помогло, может быть именно с сайтом не везет, но проверял я на двух.
    В общем проверю на других сервисах распознавания, может там получится по-лучше.



  • @anonymouls

    Значит проблема не в самом алгоритме, а в том, что нужный алгоритм для рукапчи еще не прикрутили?

    Прикрутили. Модуль понимает как координаты, так и номера картинок.

    Я вот сегодня сделал еще 3 попытки распознания капчи на рукапче и все зафейлились.

    Какое сообщение об ошибке?

    Если модуль не решает капчу, то это очень большая проблема. Вы можете сказать как ее воспроизвести, и я сразу займусь ей.



  • [16:04:17] Thread #1 : Thread failed with message "Too many fails solve recaptcha 2"

    хотя вроде все ок, кликнула по обьектам как нужно



  • Модуль позволяет ограничить количество попыток, которое тратится на решение каждой капчи. По умолчанию оно выставлено в 1. Тоесть, если с первой попытки решить не удалось - выводится именно такая ошибка.

    Если до этого несколько раз капча была решена неверно с этого ип, то гугл требует нескольких решений. Соответственно у вас все попытки заканчиваются этой ошибкой.

    Увеличить количество попыток можно в этом поле:

    0_1469193334564_IncreaseCaptchaRetries.png



  • alt text

    Тут видно что есть захват "лишнего кусочка", из-за чего сбиваются координаты и прилодение промахивается по кнопке подтвердить

    alt text

    Тут он промахнулся на пикселов 20 но скрин я сделал тогда. когда он нажимал на кнопку за фоном.



  • Пробовали увеличить размер браузера(высота самое главное), вот так:
    0_1469206459154_Resolutio.png



  • Хм, теперь действительно все хорошо, с разрешением 1440х900 все 3\3 раз капча решилась. Однако все равно инвалиды с рукапчи 100% случаев модерируют не в пользу вебмастеров. Спасибо.



  • В новой версии исправлена куча недочетов:

    • Не нужно больше увеличивать размер браузера чтобы картинка правильно отрендерилась. Исключение составляют сайты, капча вылазит в слое поверх элементов окна. Например на сайте http://answers.com.
    • Скрипт не промахивается при клике на перезагрузку капчи.
    • Если работник промазал или кликнул на кнопку "Verify", то этот клик не учитывается.

    Так что пробиваемость заметно возросла.



  • Поздравляю, действительно ни одного промаха на 20 капчах, которые я успел проверить. Ну только одно, разве что:

    Если гугл дает капчу, где нужно кликать пока картинки не исчезнут, то в 70% случаев эта капча провалится, так как необходимо чтобы она в 100% случаев решилась со второй попытки (человек с сервиса решает правильно картинку один раз, клик - проверьте новые картинки - человек решает с сервиса второй раз, клик и если после этого клика загрузится еще одна целевая картинка то это гарантированный пролет на 2 капчи).
    Может добавить в capctha2_code.js строку такого типа?:

    var F = document.getElementsByClassName('rc-imageselect-desc-no-canonical')[0].innerHTML;
    if(F.indexOf('verify')>15) { // 1
    // продолжать разгадку
    } else {
    // кликнуть на "Обновить" или использовать алгоритм "решение рекапчи без эмуляции браузера"
    }

    Этот код я набросал на быструю руку там, где я пометил строку 1 придумать что-то по-универсальней, так как ваш проект мультиязычный.

    Плюс гугл хитрая штука, и когда я в своем проекте так делал он мне начал тупо заливать капчу исключительно неудачного типа(либо он все таки заподозрил, что я ботовод), по-этому при встрече такого типа капчи я использовал на рукапче "решение рекапчи без эмуляции браузера", так как оно стоит в три раза дешевле, чем заливать кучу картинок.

    Надеюсь, я не капаю на мозги.



  • @anonymouls

    Может добавить в capctha2_code.js строку такого типа?:

    Я не хочу этого делать, именно по тому, что вы сами написали.

    когда я в своем проекте так делал он мне начал тупо заливать капчу исключительно неудачного типа(либо он все таки заподозрил, что я ботовод)

    Я тоже заметил, что гугл очень часто повторяет один и тот же метод несколько раз подряд.

    Расходы к минимуму сводит либо установка максимального числа попыток в 1, либо наличие хороших гугл акков, тогда затраты вообще не нужны.

    или использовать алгоритм "решение рекапчи без эмуляции браузера"

    Как по мне, использование альтернативного апи от рукапчи после того, как попытка решить капчу уже была, только увеличивает затраты. Почему бы тогда не решать капчу целиком через этот апи?

    Я кстати подумаю над тем, чтобы реализовать это, но в отдельном действии.

    Но там есть свои недостатки, например, невозможность использовать прокси.


Log in to reply
 

  • 10
  • 2
  • 6
  • 34
  • 3
  • 7
  • 7
  • 5