Попытка входа в HtmlUnit приводит к странной странице, которую я не могу пройти. «Сценарий отключен. Нажмите« Отправить »для продолжения» - PullRequest
0 голосов
/ 05 февраля 2020

TLDR:

Я авторизируюсь с помощью HtmlUnit безголового браузера, сайт перенаправляет меня на страницу, где я должен нажать на кнопку отправки, чтобы продолжить, не могу найти ее элемент в HtmlUnit. Не удается найти способ щелкнуть по нему на go на нужной странице после входа в систему. Эта страница не там с обычным человеческим логином.

Справочная информация

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

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

Я должен отметить, что эта среда обучения требует входа в систему из среды Microsoft , которая похожа на ту, что была в Outlook, но настроена для университетов. Возможно, это дает ключ к пониманию того, какой страницей я должен быть.

То, что я пробовал

Я посмотрел на HtmlUnit Похоже, что безголовый браузер может достичь sh моей цели входа в систему, по крайней мере. Я установил WebClient и перешел на страницу.

Примерно так:

    final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_60);
    webClient.getOptions().setJavaScriptEnabled(true);
    webClient.getCookieManager().setCookiesEnabled(true);
    webClient.getOptions().setRedirectEnabled(true);
    HtmlPage page = webClient.getPage(LOGIN_FORM_URL);

Все прошло хорошо, я добрался до страницы входа, изолировал форму и заполнил ввод мои учетные данные:

    HtmlForm form = page.getForms().get(0);        
    HtmlEmailInput username =  form.getInputByName("UserName");
    HtmlPasswordInput pass =  form.getInputByName("Password"); 
    HtmlElement buttonElement = form.getElementsByTagName("span").get(1);
    username.setValueAttribute(USERNAME);
    pass.setValueAttribute(PASSWORD);      

    HtmlPage page2 = buttonElement.click();

Проблема

Я ожидал, что меня перенаправят в среду обучения, вместо этого я получил странную страницу. Это структура при печати с page2.asXml():

<html>
 <head>
  <title>
   Working...
  </title>
 </head>
 <body>
  <form method="POST" name="hiddenform" action="https://engine.surfconext.nl:443/authentication/sp/consume-assertion">
    <input type="hidden" name="SAMLResponse" value="PHNhbWxwOl.... An insanely long value />
    <noscript>
      <p>Script is disabled. Click Submit to continue.</p><input type="submit" value="Submit" />
    </noscript>
  </form>
  <script language="javascript">
  //<![CDATA[
    window.setTimeout('document.forms[0].submit()', 0);
  //]]>
  </script>
 </body>
</html>

Я могу не , чтобы понять, как нажимать на ввод между тегами noscript.

Я попытался найти вход для отправки с помощью getElementsByTagName, чтобы смоделировать щелчок по нему, но он даже не распознал, что он там есть. Когда я использовал getChildElementCount() для тега noscript, он вернул 0.

Нужно ли делать что-то особенное, чтобы пройти эту страницу?

1 Ответ

1 голос
/ 06 февраля 2020

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

Отказ от ответственности: Этот ответ предназначен только для образовательных целей. Я не готов помочь вам построить веб-скребок. По крайней мере, не бесплатно;)

Страница, на которую вы попали, является страницей с защитой от скребков, созданной с целью предотвращения доступа автоматизированных систем к этой странице. Это подразумевает две мысли:

  • Ваш поддельный браузер обнаружен (даже если вы подключаетесь с обычного ip)
  • Они пытаются заблокировать вас.

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

Прежде всего, вы могли быть обнаружены только благодаря плохая настройка HTTP-заголовка, попробуйте изменить BrowserVersion или даже попытаться воспроизвести HTTP-заголовки вашего реального браузера.

Если это не сработает, мы довольно просто наберем go здесь, как form ни input не заключены в тег <noscript> ( здесь я расскажу вам SURFspot, как улучшить ), чтобы вы могли анализировать атрибуты method и action формы и ввод name и value, тогда вам нужно только создать поддельный запрос на публикацию в качестве следующего шага (так что вы не нажимаете на кнопку, а скорее притворяетесь, что произойдет, если вы сможете ...

Итак, создайте форму поста с перенаправьте значения на правильный URL. Убедитесь, что они установили вам куки (если это так, скопируйте их) и установите правильное значение для заголовка realm (они могут это проверять также), и двери откроются.

...