【问题标题】:htmlUnit behaving oddly. I am not able to retrieve correct number of anchor tag or link tags?htmlUnit 行为异常。我无法检索正确数量的锚标签或链接标签?
【发布时间】:2012-08-17 16:19:51
【问题描述】:

我正在使用 HtmlUnit 2.10。我正在为网站创建一个小型链接验证器。对于爬行,我正在使用它。在我的研究期间,我试图爬行:loans.xxxxxxx.com。它有 58 个锚标签和 5 个链接标签。

我正在写这样的代码

    List<HtmlElement> elementsOfPage = (List<HtmlElement>) htmlPage.getElementsByTagName("link");
    Iterator<HtmlElement> it = elementsOfPage.iterator();
    System.out.println(elementsOfPage.size());
    while(it.hasNext()) {
        HtmlElement htmlElement = it.next();
        System.out.println(htmlElement.toString());
    }

我也对锚标记执行相同的程序,即 a.对于链接,它只显示 3,对于锚点,它只显示 56,即使分别有 5 和 58。

代码中有一些部分被注释了,我以为网络客户端会忽略它,但如果你真的打印它会显示一些结果实际上来自注释代码。

// 在运行 webclient 之前,我禁用了 applet、css、javascripts 并将超时时间增加到 7 秒。

为什么这种行为很奇怪?

【问题讨论】:

    标签: java jakarta-ee web-crawler htmlunit


    【解决方案1】:

    你如何得到 58 和 5 这样的数字?我试图检查您使用 HtmlUnit 2.10 + JSoup 解析器提供的 URL。代码是(Groovy,但几乎是 Java):

    def client = new WebClient(BrowserVersion.FIREFOX_3_6)
    client.setThrowExceptionOnScriptError(false);
    def page = (HtmlPage)client.getPage("http://loans.bankofamerica.com/en/index.html")
    def doc = Jsoup.parse(page.asXml())
    println doc.select("a").size()
    println doc.select("link").size()
    

    结果是 56 和 2。但使用默认 UserAgent

    def client = new WebClient()
    

    结果是 56 和 3!似乎服务器提供不同的标记取决于用户代理字符串(可能还有其他标头)。

    【讨论】:

    • 问题是提供的 html 确实包含所有链接,因为我正在使用 getContentAsAString 然后对其进行操作。因此,当我打印字符串时,它确实包含视图源在任何浏览器中显示的所有内容..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多