簡體   English   中英

HtmlUnit 登錄嘗試導致我無法通過的奇怪頁面。 “腳本已禁用。單擊提交以繼續”

[英]HtmlUnit Login attempt leads to a weird page I can't get past. "Script is disabled. Click Submit to continue"

域名注冊地址:

我使用HtmlUnit無頭瀏覽器登錄,站點將我重定向到一個頁面,我必須單擊提交按鈕才能繼續,在HtmlUnit找不到它的元素。 登錄后找不到點擊它進入所需頁面的方法。 此頁面存在常規人工登錄。

背景

我的學校有一個學習環境,我們可以在其中訂閱課程以下載課程資料等。

當我剛開始為一門課程學習 Java 時,我想我可以嘗試看看我是否可以制作一個 Java 應用程序,它可以登錄並為我獲取所有課程材料。

我必須指出,此學習環境需要從類似於 Outlook 的Microsoft 環境登錄,但為大學定制。 也許這提供了關於我登陸的頁面應該是什么的線索。

我試過的

我查看了HtmlUnit ,似乎無頭瀏覽器至少可以完成我的登錄目標。 我設置了一個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找到提交輸入,這樣我就可以模擬點擊它,但它似乎甚至沒有意識到它在那里。 當我在 noscript 標簽上使用getChildElementCount()時,它返回0

我需要做一些特別的事情才能通過這個頁面嗎?

我認為這個問題需要回答的范圍很廣,但是當您提供更多信息和發現時,我會更新答案。

免責聲明:此答案僅用於教育目的。 我不願意幫你構建一個網絡爬蟲。 至少不是免費的;)

您登陸的頁面是一個反爬蟲頁面,其目的是防止自動系統登錄到該頁面。 這暗示了兩個想法:

  • 已檢測到您的假瀏覽器(即使您是從傳統 IP 連接)
  • 他們正試圖阻止你。

這可以讓您了解,在此過程中可能還有其他此類技術會阻止您繼續進行,但值得一試。

首先,您可能只是因為 HTTP 標頭設置不佳而被檢測到,嘗試更改 BrowserVersion,甚至嘗試重現真實瀏覽器的 HTTP 標頭。

如果它不起作用,我們很容易到這里,因為forminput都被包裹在一個<noscript>標簽中(這里我告訴你 SURFspot 如何改進),所以你可以解析表單methodaction屬性和輸入namevalue那么您只需要在下一步中生成一個假的發布請求(所以您不是單擊按鈕而是假裝如果您能夠...

因此,生成一個帶有正確值的表單帖子到正確的 URL。 檢查他們是否為您設置了 cookie(如果是,也復制它們)並將正確的值設置為realm標頭(他們可能也在檢查),然后門就會打開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM