代码之家  ›  专栏  ›  技术社区  ›  tkiddy95

Java HtmlUnit-抓取网站时接收空href

  •  0
  • tkiddy95  · 技术社区  · 7 年前

    我目前正在尝试一个项目,发送一个url到多个网站,扫描他们的分类和使用java和任何安全风险 HtmlUnit.

    该网站的工作原理是在第一页中输入URL,然后单击提交。从这里显示一个弹出窗口,用户必须选择是重新分析还是使用上次扫描结果(在这种情况下,我们希望始终重新分析)。提供空href的是重新分析锚点。我的想法是,这是一个javascript问题,无法生成结果页面的URL。不幸的是,我不确定下一步该去哪里:/

    项目代码(很抱歉它太脏了!)-

    //turn off htmlunit logging//
        java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF);
        java.util.logging.Logger.getLogger("org.apache.http").setLevel(java.util.logging.Level.OFF);
        java.util.logging.Logger.getLogger("org.apache.http.client.protocol.ResponseProcessCookies").setLevel(java.util.logging.Level.OFF);
    
        //initialise url and obtain users selection//
        System.out.println("Please select the url you would like to review:");
        Scanner sc = new Scanner(System.in);
        String startPath = sc.nextLine();
    
        //enable javascript and use engine to initialise and parse websites code//
        String url = "https://www.virustotal.com/#url";
        System.out.println("Connecting to Virus Total...");
        WebClient webClient = new WebClient(BrowserVersion.CHROME);
        webClient.getOptions().setThrowExceptionOnScriptError(false);
        webClient.getOptions().setJavaScriptEnabled(true);
        webClient.waitForBackgroundJavaScript(8000);
        page = webClient.getPage(url);
    
        //fill in form
        HtmlForm form = page.getFirstByXPath("//form[@action='/en/url/submission/']");
        HtmlTextInput textField = form.getInputByName("url");
        textField.setValueAttribute(startPath);
        HtmlButton button1 = page.getFirstByXPath("//button[@id='btn-scan-url']");
        HtmlPage page1 = button1.click();
    
        //waiting and dealing with popup
        webClient.waitForBackgroundJavaScript(8000);
        String page1String = page1.getWebResponse().getContentAsString();
        System.out.println(page1String);
        HtmlAnchor htmlAnchor = page1.getFirstByXPath("//button[@id='btn-url-reanalyse']");
        System.out.println(htmlAnchor); //testing what I can see in the anchor
        HtmlPage page2 = htmlAnchor.click();
    
        //progressing to next screen
        String output = page2.asText();
        System.out.println(output);
    

    打印字符串page1String时收到的HTML:

    <div class="modal-footer">
      <a id="btn-url-reanalyse" class="btn" href="">
        Reanalyse
      </a>

    手动浏览网站时的HTML:

    <a id="btn-url-reanalyse" class="btn" href="/en/url/submission/?force=1&amp;url=http%3A//www.facebook.com/&amp;token=415eda59daae48938b1dcc64f3152ed5ee9ac27d485348d55c87e9da7e714605">
        Reanalyse
      </a>

    任何帮助或建议都将不胜感激!我也很乐意使用提供的任何模块建议,只需使用 HtmlUnit

    提前谢谢。

    1 回复  |  直到 7 年前
        1
  •  0
  •   RBRi    7 年前
     java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF);
    

    我认为在查找问题时禁用日志记录是个坏主意。 如果启用日志记录,您将看到js错误。

    webClient.getOptions().setThrowExceptionOnScriptError(false);
    

    因此,程序继续运行,但部分javascript没有执行。 我想这就是你的链接没有更新的原因。

    Javascript错误看起来像HtmlUnit错误。请打开一个问题并隔离一个最小的测试用例 as described here .