HtmlUnit 登录尝试导致我无法通过的奇怪页面。 "Script is disabled. Click Submit to continue"

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

TLDR:

我使用 HtmlUnit 无头浏览器登录,站点将我重定向到一个页面,我必须单击提交按钮才能继续,在 HtmlUnit 中找不到它的元素。登录后找不到点击它转到所需页面的方法。此页面 正常人工登录。

背景

我的学校有一个学习环境,我们可以在其中订阅课程以下载课程 material 等。

因为我刚开始学习 Java 一门课程,我想我可以尝试看看我是否可以制作一个 java 应用程序来登录并获取所有课程 material对我来说。

我必须注意,此学习环境需要从 Microsoft 环境 登录,该环境类似于 outlook,但专为大学定制。也许这提供了关于我登陆的页面应该是什么的线索。

我试过的

我查看了 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

我需要做一些特别的事情才能通过这个页面吗?

我认为这个问题的回答范围很广,但是当您提供更多信息和发现时,我会更新答案。

免责声明:此答案仅用于教育目的。我不愿意帮助您构建网络抓取工具。至少不是免费的 ;)

您登陆的页面是一个 anti-scraper 页面,其构建目的是为了防止自动系统登录该页面。这意味着两个想法:

  • 已检测到您的假浏览器(即使您是从常规 ip 连接的)
  • 他们正试图阻止您。

这可以让您了解可能有其他技术会阻止您继续进行,但值得一试。

首先,您可能只是因为 HTTP header 设置不当才被检测到,请尝试更改浏览器版本,甚至尝试重现您真实浏览器的 HTTP header。

如果它不起作用,我们很容易到这里,因为 forminput 都包裹在 <noscript> 标签中( 这里我告诉你 SURFspot 如何改进 ),所以你可以解析表单 methodaction 属性并输入 namevalue 然后你需要只是为了下一步产生一个假的 post 请求(所以你不是点击按钮而是假装如果你能够...

会发生什么

因此,生成一个表格 post,右边 URL 具有正确的值。检查他们是否为您设置了 cookie(如果是,也复制它们)并将正确的值设置为 realm header(他们也可能正在检查)并且门应该打开。