使用 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();
到目前为止,我一直在使用 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();