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

Java HtmlUnit - receiving empty href when scraping website

我目前正在尝试一个项目,将 url 发送到多个网站以扫描它们以进行分类和使用 java 和 HtmlUnit. www.virustotal.com 的任何安全风险是我必须配置的最后一个网站,由于 href 为空,我在浏览网站时遇到问题。

该站点通过在第一页中输入 URL 然后单击提交来工作。从这里显示一个弹出窗口,用户必须 select 是重新分析还是使用上次扫描结果(在这种情况下,我们希望始终重新分析)。提供空 href 的是重新分析锚点。我的想法是,这是一个 java 脚本问题,它不会为结果页面生成 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);

HTML 我在打印字符串 page1String 时收到:

<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,因为它是我发现的第一个实际与其他站点一起使用的模块之一。

提前致谢。

 java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF);

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

webClient.getOptions().setThrowExceptionOnScriptError(false);

因此程序会继续,但 javascript 的部分内容不会执行。 我想这就是为什么您的 link 没有更新的原因。

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