使用 Java 从 javascript link 获取 html 更改

Get html changes from javascript link using Java

到目前为止,我一直在使用 JSOUP 来满足我的所有 html 网站要求。但是,我 运行 遇到了障碍。 Kickass 通过单击 javascript link <a href="javascript:getFiles('52261EB9480EDFD83B5B85C8C4817D28F3AE0C95', 1);" class="showmore folded"> 获取每个种子文件的完整列表。我已经将 javascript 函数追溯到所使用的 *.js 文件,但我不确定如何模仿这种行为。理想情况下,我只想从主站点获取 javascript link,并像获取任何其他网站一样获取列表,尽管 JSOUP 的所有内容似乎都遵循 html links 而不是 javascript 个。

所以我尝试使用 HtmlUnit。我用 chrome 检查了网站: https://kickass.to/australian-aria-top-50-singles-13-10-2014-t9702189.html

并复制了 xpath 表达式。目前下面的方法不起作用,虽然我想绕过必须将这个库用于单个函数,但我一般无法让它工作。

我的测试代码:

    java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF);
    WebClient webClient = new WebClient(BrowserVersion.CHROME);
    HtmlPage page = webClient.getPage("https://kickass.to/australian-aria-top-50-singles-13-10-2014-t9702189.html");

    HtmlElement htmlElement = page.getFirstByXPath("//*[@id=\"ul_top\"]/tbody/tr[31]/td[2]/a");
    System.out.println(htmlElement.toString());
    htmlElement.click(); 
    webClient.waitForBackgroundJavaScript(1000);

    //get changes here
    webClient.closeAllWindows();

Jsoup 不执行Javascript(据我目前从很多问题中看到的)。您应该考虑使用 Selenium + HtmlUnitDriver(无头运行)。我试过这个示例代码,页面源包含执行 javascript.

后显示的内容

示例代码:

//set javascript enabled to true
HtmlUnitDriver driver = new HtmlUnitDriver(true);

//to set logging off....
LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log","org.apache.commons.logging.impl.NoOpLog");
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);
java.util.logging.Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.OFF);

// navigate to the page
driver.get("https://kickass.to/australian-aria-top-50-singles-13-10-2014-t9702189.html");
driver.executeScript("javascript:getFiles('52261EB9480EDFD83B5B85C8C4817D28F3AE0C95', 1);","");
//this is displayed only after executing the javascript
System.out.println(driver.getPageSource().contains("Australian ARIA Top 50 Singles 13.10.2014.pdf"));
System.out.println(driver.getPageSource().contains("47. Sheppard - Geronimo.mp3"));
//System.out.println(driver.getPageSource());
driver.quit();