HtmlUnit登录尝试导致我无法通过的怪异页面。 “脚本已禁用。单击提交以继续”

问题描述 投票:0回答:1

TLDR:

我使用HtmlUnit无头浏览器登录,网站将我重定向到一个页面,在该页面上我必须单击“提交”按钮才能继续,在HtmlUnit中找不到其元素。登录后找不到找到该页面的方法。此页面not上有常规的人工登录。

背景

我的学校有一个学习环境,我们订阅课程以下载课程材料等。

[当我刚开始学习Java来学习一门课程时,我想我可以尝试看看是否可以使Java应用程序登录并为我获取所有课程资料。

我必须注意,此学习环境要求从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>

在我的一生中,我可以not弄清楚如何单击noscript标记之间的输入。

我试图用getElementsByTagName查找提交输入,因此可以模拟对它的单击,但是它似乎甚至都没有意识到它在那里。当我在noscript标签上使用getChildElementCount()时,它返回了0

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

javascript java html dom htmlunit
1个回答
0
投票

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

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

您登陆的页面是一个反爬虫页面,旨在防止自动系统登录到该页面。这意味着两个想法:

  • 已检测到您的假冒浏览器(即使您是从传统IP连接的,也可以)
  • 他们正试图阻止您。

这可以使您理解,在前进的道路上可能还有其他这种技术可以阻止您继续前进,但是值得一试。

首先,可能仅由于不良的HTTP标头设置而检测到您,尝试更改BrowserVersion甚至尝试重现真实浏览器的HTTP标头。

如果不起作用,我们很容易去这里,因为forminput都包装在<noscript>标签中(这里我告诉您SURFspot如何改进) ,因此您可以解析methodaction格式的属性,并输入namevalue,然后只需生成一个伪造的发帖请求即可(因此,您无需单击按钮,而是伪造如果您能够...会发生什么?

因此,在正确的URL上生成具有正确值的表单发布。检查它们是否为您设置了cookie(如果也要复制它们),并将正确的值设置为realm标头(它们也可能会进行检查),然后门将打开。

© www.soinside.com 2019 - 2024. All rights reserved.