繁体   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