Получить изображение из reCAPTCHA

188
28 июля 2018, 19:30

Мне нужно пройти авторизацию на вебсайте средствами C#. В форме авторизации присутствует reCAPTCHA. Нужно как то её обработать (т.е. вытащить картинки, текст задания и позволить пользователю решить это дело).

Для начала, я вижу пустой div class="g-recaptcha" data-sitekey="...". Отсюда можно взять значение атрибута data-sitekey. Перейдём по ссылке https://www.google.com/recaptcha/api/challenge?k=[data-sitekey value] и загрузится примерно такая страничка:

var RecaptchaState = {
    challenge : '...',
    server : 'https://www.google.com/recaptcha/api/',
    site : '...',
    ...
};
document.write('<scr'+'ipt type="text/javascript" s'+'rc="' + RecaptchaState.server + 'js/recaptcha.js"></scr'+'ipt>');

Каким образом я могу вытащить картинки с reCAPTCHA? Старая reCAPTCHA представлялась по видимому одной картинкой, которую можно было загрузить по такому адресу: http://www.google.com/recaptcha/api/image?c=[challenge from RecaptchaState]. Что делать с новой, я не знаю. Не особо разбираюсь в веб-программировании.

UPD: Возможно есть иное решение, при котором нам не потребуется получать картинку. Может быть возможно как то отобразить капчу, чтобы её прошёл пользователь. Что то вроде WebBrowser, только не всю страницу, а лишь саму капчу, полученную из WebResponse.

Answer 1

Я открываю сайт в WebBrowser, получаю все картинки с сайта и так нахожу саму картинку капчи:

private void openAndWaitCompliteURL(string url) {
            webBrowser.Navigate(url);
            while (webBrowser.ReadyState != WebBrowserReadyState.Complete) {
                Application.DoEvents();
            }
        }
private string getImageWhenLoad(string attr) {
        HtmlDocument doc = webBrowser.Document;
        HtmlElementCollection htmlElementCollection = doc.Images;
        foreach (HtmlElement htmlElement in htmlElementCollection) {
            string imgUrl = htmlElement.GetAttribute(attr);
            return imgUrl;
        }
    }
openAndWaitCompliteURL(url);
capchaForm.capchaPictureBox.ImageLocation = getImageWhenLoad("src");

После чего вывожу картинку в PictureBox.

READ ALSO
Задать CornerRadius как Attached Property для ComboBox

Задать CornerRadius как Attached Property для ComboBox

Я смог сделать CornerRadius как Attached property для Button и TextBox с помощью класса

197
Не отображается текст из файла в ListBox-e

Не отображается текст из файла в ListBox-e

После перезагрузки компьютера перестали выводиться данные из файла в ListBox, но при этом ошибок при компиляции не выявляются, просто при нажатии...

185
Wpf Calendar изменение CalendarItem

Wpf Calendar изменение CalendarItem

Вопрос такой возможно ли создание/изменение стиля CalendarItem так чтобы можно было отображать еще и доп значение(грубо говоря номер) из модели...

252
Как передать сумму в POS терминал?

Как передать сумму в POS терминал?

Пишу аналог кассового терминала для WindowsДля оплаты используются наличные или карта

202