rus*_*h66 13 javascript java html-parsing htmlunit
我试图能够测试一个使用javascript来呈现大部分HTML的网站.使用HTMLUNIT浏览器,您如何能够访问由javascript生成的html?我正在浏览他们的文档,但不确定最佳方法是什么.
WebClient webClient = new WebClient();
HtmlPage currentPage = webClient.getPage("some url");
String Source = currentPage.asXml();
System.out.println(Source);
Run Code Online (Sandbox Code Playgroud)
这是一个简单的方法来获取页面的HTML,但你会使用domNode或其他方式来访问javascript生成的HTML吗?
acd*_*ior 10
你必须花一些时间来执行JavaScript.
检查下面的示例工作代码.该bucket divs为没有原始出处.
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.List;
import com.gargoylesoftware.htmlunit.*;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
public class GetPageSourceAfterJS {
public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF); /* comment out to turn off annoying htmlunit warnings */
WebClient webClient = new WebClient();
String url = "http://www.futurebazaar.com/categories/Home--Living-Luggage--Travel-Airbags--Duffel-bags/cid-CU00089575.aspx";
System.out.println("Loading page now: "+url);
HtmlPage page = webClient.getPage(url);
webClient.waitForBackgroundJavaScript(30 * 1000); /* will wait JavaScript to execute up to 30s */
String pageAsXml = page.asXml();
System.out.println("Contains bucket? --> "+pageAsXml.contains("bucket"));
//get divs which have a 'class' attribute of 'bucket'
List<?> buckets = page.getByXPath("//div[@class='bucket']");
System.out.println("Found "+buckets.size()+" 'bucket' divs.");
//System.out.println("#FULL source after JavaScript execution:\n "+pageAsXml);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Loading page now: http://www.futurebazaar.com/categories/Mobiles-Mobile-Phones/cid-CU00089697.asp??x?Rfs=brandZZFly001PYXQcurtrayZZBrand
Contains bucket? --> true
Found 3 'bucket' divs.
Run Code Online (Sandbox Code Playgroud)
使用的HtmlUnit版本:
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.12</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
假设问题是由于 AJAX 调用而由 JavaScript 生成的 HTML,您是否尝试过HtmlUnit FAQ 中的“AJAX 不起作用”部分?
Howtos中还有一个关于如何将 HtmlUnit 与 JavaScript 结合使用的部分。
如果您的问题在这里没有得到解答,我认为我们需要更多细节才能提供帮助。
| 归档时间: |
|
| 查看次数: |
12491 次 |
| 最近记录: |