【问题标题】:HtmlUnit getByXpath returns nullHtmlUnit getByXpath 返回 null
【发布时间】:2011-05-18 05:42:01
【问题描述】:

我正在使用 Groovy 进行编码,但是,我不认为它是一组特定于语言的问题。

其实我有两个问题

第一个问题

我在使用 HtmlUnit 时遇到了问题。它告诉我,我试图抓住的东西是空的。

我正在测试它的页面是: http://browse.deviantart.com/resources/applications/psbrushes/?order=9&offset=0#/dbwam4

我的代码:

client = new WebClient(BrowserVersion.FIREFOX_3)
client.javaScriptEnabled = false

page = client.getPage(url)

//coming up as null
title = page.getByXPath("//html/body/div[4]/div/div[3]/div/div/div/div/div/div/div/div/div/div/h1/a")

println title

这只是打印出来:[]

这是因为页面使用了 onclick() 吗?如果是这样,我将如何解决这个问题?启用 javascript 会在我的 cmd 提示符中造成混乱。

第二个问题

我也想获取图像,但遇到了麻烦,因为当我尝试获取 XPath(通过 firebug)时,它显示为://*[@id="gmi-ResViewSizer_img"]强>

我该如何处理?

【问题讨论】:

    标签: xpath null htmlunit


    【解决方案1】:

    第一个答案:

    /html/body/div[3]/div/div[3]/div/div/div/div/div/div/div/div/div/div/h1/a
    

    您的 XPATH 在主体的第 4 个div 的谓词过滤器中偏离了一个,它应该是第 3 个div。与您最初使用 Firebug 获取 XPATH 时相比,该站点的 HTML 似乎可以/确实发生了变化。您可能需要调整 XPATH 以适应潜在的变化,并且对文档结构中的某些差异不太敏感。

    可能是这样的:

    /html/body//div/h1/a
    

    第二个答案:您列出的 XPATH 将起作用。它可能看起来很奇怪/很短(并且可能不是最有效的),但// 从根节点开始并遍历树中的每个节点,* 匹配任何元素(包括img)和[] 谓词过滤器将其限制为具有 id 属性且值等于“gmi-ResViewSizer_img”的那些。

    对于 XPATH,还有许多其他选项也可以使用。它还取决于 HTML 结构更改的频率。这也适用于选择img的页面:

    /html/body/div/div/div/div/img[1]
    

    【讨论】:

    • 再次感谢 Mads Hansen 的解释 :) 你很有帮助。解释很有帮助,但是,对于第一个答案,我似乎仍然得到一个空的回报。我认为 H1 有问题
    • 它们都不起作用,实际上这三个都不起作用。昨天我试图用我的脚本(一个一个)查看它,但似乎并没有找到问题。
    • 看起来好像是脚本在加载之前的页面。 (即相同的链接减去/dwam4)你知道是否有任何理由会从前一页而不是指定的页面中提取信息?
    • 好收获。 URL 中的哈希符号# 是片段标识符en.wikipedia.org/wiki/Fragment_identifier,用于标识页面中的某个位置(如命名锚点)。当浏览器不这样做时,htmlunit 很可能正在“丢弃”“#/dbwam4”并加载没有它的 URL。
    • 这个问题有什么替代方案吗?我可以选择根据原始网址生成我想要的网址,但我不希望这样做。
    【解决方案2】:

    我遇到了同样的问题,当我在页面上实现iframe标签时解决了,尝试调用

    ((HtmlPage)current_page.getFrames()[n].getEnclosedPage()).getElementByXPath(...
    

    其中 n 是 iframe 集合中 frame 中的位置。这对我有用!!!

    非常感谢。

    【讨论】:

    • 您的问题与片段标识符有关吗?
    猜你喜欢
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    相关资源
    最近更新 更多