2017-08-06 35 views
0

我目前正在尝试项目发送一个URL到多个网站扫描他们的分类和任何安全风险使用Java和HtmlUnit. www.virustotal.com是我必须的最后一个网站配置和我正在通过该网站进行的问题,因为href是空的。Java HtmlUnit - 当刮网站时收到空href

该网站的工作原理是在第一页输入网址,然后点击提交。从这里显示一个弹出窗口,用户必须选择是重新分析还是使用最后的扫描结果(在这种情况下,我们希望始终重新分析)。它是提供空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); 

HTML后我会收到打印出字符串page1String:

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

01:

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,因为它是我发现与其他站点实际合作的第一个。

在此先感谢。

+0

我希望Facebook令牌不是一个重要的。 – Oleg

+0

附加在网址中。它可能是一个公开的@Oleg –

+0

@SagarV也许,只是指出了OP的情况下,它不是... – Oleg

回答

0
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