Получение изображения с капчей в GeckoFx [C#]

Captcha-Comic2[1]Бывают случаи, когда нужно получить капчу и показать ее пользователю для ввода, либо отправить в какой-то сервис для автоматического распознавания. В этой статье я опишу, как получить изображение капчи (или любого другого) в GeckoFx.

GeckoFx имеет класс ImageCreator, который позволяет создавать скриншоты указанного размера текущей открытой страницы. Т.е. мы просто передаем отступы (можно обойтись и без них, тогда начальная точка будет 0,0) по X и Y и размер изображения — на выходе получаем массив байт, который легко «трансформируется» в Image:

Как видите, ничего сложного 🙂

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

Создаем новое WinForms приложение, называем его GeckoFxImage, размеры формы 195; 181, имя формы — FrmMain.
Список компонентов на форме:

  • PictureBox (Name = pbImage, Size = 175; 60, Location = 0;0);
  • TextBox (Name = tbInput, Size = 175; 20, Location = 0; 66);
  • Button (Name = btnEnter, Size = 175; 23, Location = 0; 92, Text = Enter);
  • Button (Name = btnGetNew, Size = 175; 23, Location = 0; 121, Text = Get new);

Устанавливаем Async Targeting Pack (нужен для возможности использования «асинхронных фич» в .NET 4).

Теперь приступим к написанию кода.

Добавим новый класс GeckoExtensionsMethods:

Класс содержит статические методы, среди которых метод расширения GetJsImage для GeckoWebBrowser, который упрощает получение изображения с указанным Id:

Теперь добавим класс CaptchaEnter. Он будет отвечать за загрузку страницы, получения и возвращения изображения капчи в форму и ввод капчи, которую ввел пользователь.

Думаю, все понятно, если прочесть комменты в коде 🙂

Теперь перейдем к коду главной формы.

Добавим следующие переменные:

Добавим инициализацию Gecko в конструктор главной формы:

Напишем метод, который будет изменять активность (свойство enabled) двух кнопок:

И напоследок, создадим два обработчика нажатия для кнопок btnEnter и btnGetNew:

Первая кнопка будет передавать введенную капчу пользователем, а вторая — получать новое изображение капчи.

Вот и всё.

Исходники можно найти на GitHub.

Запись опубликована в рубрике Статьи по C# с метками , , , , . Добавьте в закладки постоянную ссылку.

5 комментариев на «Получение изображения с капчей в GeckoFx [C#]»

  1. Максим говорит:

    Спасибо, очень помогли Ваши статьи!

  2. Юрий Йосифович говорит:

    Здравствуйте!
    Очень познавательная статья!

    Еще бы такую же статью на примере отправки и получения (и выбора ответов) reCaptcha — было бы очень круто.

    Дело в том, что при отгадывании reCaptcha бывает что даже не нужно выбирать картинки (сразу галочка зеленой становится если IP «чистая») — а это в свою очередь существенное уменьшение затрат на отгадывание.

    Документация библиотеки Antigate дает пример использования. Но, как его использовать в реальных условиях не имея опыта — сложновато разобраться.

    • admin говорит:

      Вот как раз опыт набирается, когда разбираешься во всяких «сложных» штуках 🙂
      А чем отличаются «реальные условия» от «нереальных условий», которые описаны в доках? Методы остаются такими же, параметры методов — тоже. С помощью их либы все в пару строк кода решается (вызвать конструктор класса и потом синхронно отправить изображение и получить ответ).

  3. Иван говорит:

    Статья великолепная, мне понравилась — очень познавательно.
    И сразу у меня возник вопрос. Как получить доступ к изображения с капчей в ?
    Для наглядности вот с такой https://www.google.com/recaptcha/api2/demo

    • admin говорит:

      Проверить не могу, т.к. капча мне не показывается. Но принцип должен быть тот же — по css-селектору получить элемент изображения и сделать скриншот этой области.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *