目前,我正在想如何处理碎片的身份,一个链接,我想要抓住信息,包含一个碎片的身份。看来,如果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());

    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top