HtmlUnit和碎片的身份
题
目前,我正在想如何处理碎片的身份,一个链接,我想要抓住信息,包含一个碎片的身份。看来,如果HtmlUnit是废弃的"#/db4mj"我的网址和因此,载入原来的网址。
任何人都不会知道的一种方式来处理碎片的身份?(我可以张贴例码,以进一步解释,如果需要的)
编辑
因为我不是越来越多的意见(没有答复),我要增加赏金.对不起这是只有50,但我只有79开始
编辑
这里是一个例子码的要求。
我们的网址是: http://browse.deviantart.com/resources/applications/psbrushes/?order=9&offset=0
所以如果你看一下内容的链接,你会看到多个刷子,包含的网址。所以我的剧本抓住址: http://browse.deviantart.com/resources/applications/psbrushes/?order=9&offset=0#/dbwam4
你可以看见有的片段标识符 #/dbwam4 现在我试着抓住的的内容,在这一页,但HtmlUnit仍然认为它是在原来的网址。
这里是一个例码在我的剧本里,失败的片段标识URL但没有任何问题与原来的网址。
client = new WebClient(BrowserVersion.FIREFOX_3)
client.javaScriptEnabled = false
page = client.getPage(url) //url with fragment identifier
//this is on the url with the fragment identifier only, not the original url
img = page.getByXPath("*[@id="gmi-ResViewSizer_img"]")
我希望能够抓住的某些信息的网址的片段标识符,但我无法访问它任何责任。
解决方案
那里是 好消息 和 坏消息.
第一个好消息是,HtmlUnit似乎是工作就好了。
如果你访问 该网页有的片段标识符URL 在浏览器与JavaScript关闭(也许用 Firefox的QuickJava插件),将看不到的"单刷图"。
因此,为了获得这一页你需要使用Web客户端与setJavaScriptEnabled设置为真实的。
现在的坏消息:
我有不一贯能够获得的"单刷图"的网页使用HtmlUnit JavaScript导(我不知道为什么)。虽然,我已经能够获得充分的页面上的场合。
真正的问题是国家的返回HTML是那么糟糕,因为藐视我的尝试来进行分析(我试过了 TagSoup, jsoup, Jaxen, 等等)。因此,我怀疑试图分析网页使用XPath可能不对你的工作。
因此,我认为你需要求助于使用普通的表达(这远远不是理想的),或者甚至使用某些变体中的串。个("gmi-ResViewSizer_img").
我希望这有所帮助。
编辑
我管理得到的东西,零星的工作。我恐怕我不会转换为常规,所以它将在普通的老Java。
我还没看过的来源HtmlUnit但几乎可以作为如果事情在运行过程中的节省是帮助,使分析工作??没有救我似乎得到NullPointerExceptions.
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.WebRequest;
import com.gargoylesoftware.htmlunit.WebResponse;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.util.FalsifyingWebConnection;
import java.io.File;
import java.io.IOException;
public class TestProblem {
public static void main(String[] args) throws IOException {
WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6);
client.setJavaScriptEnabled(true);
client.setCssEnabled(false);
String url = "http://browse.deviantart.com/resources/applications/psbrushes/?order=9&offset=0#/dbwam4";
client.setThrowExceptionOnScriptError(false);
client.setThrowExceptionOnFailingStatusCode(false);
client.setWebConnection(new FalsifyingWebConnection(client) {
@Override
public WebResponse getResponse(final WebRequest request) throws IOException {
if ("www.google-analytics.com".equals(request.getUrl().getHost())) {
return createWebResponse(request, "", "application/javascript"); // -> empty script
}
if ("d.unanimis.co.uk".equals(request.getUrl().getHost())) {
return createWebResponse(request, "", "application/javascript"); // -> empty script
}
if ("edge.quantserve.com".equals(request.getUrl().getHost())) {
return createWebResponse(request, "", "application/javascript"); // -> empty script
}
if ("b.scorecardresearch.com".equals(request.getUrl().getHost())) {
return createWebResponse(request, "", "application/javascript"); // -> empty script
}
//
if (request.getUrl().toString().startsWith("http://st.deviantart.net/css/v6core_jc.js")) {
WebResponse wr = super.getResponse(request);
return createWebResponse(request, wr.getContentAsString(), "application/javascript");
}
if (request.getUrl().toString().startsWith("http://st.deviantart.net/css/v6loggedin_jc.js")) {
WebResponse wr = super.getResponse(request);
return createWebResponse(request, wr.getContentAsString(), "application/javascript");
}
return super.getResponse(request);
}
});
HtmlPage page = client.getPage(url); //url with fragment identifier
File saveFile = new File("saved.html");
if(saveFile.exists()){
saveFile.delete();
saveFile = new File("saved.html");
}
page.save(saveFile);
HtmlElement img = page.getElementById("gmi-ResViewSizer_img");
System.out.println(img.toString());
}
}