HtmlUnit getByXpath返回null

时间:2010-12-01 00:34:20

标签: xpath null htmlunit

我正在使用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”]

我该如何处理?

2 个答案:

答案 0 :(得分: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。看来该网站的HTML可以/确实从你最初使用Firebug抓住XPATH时发生了变化。您可能需要调整XPATH以适应潜在的变化,并且对文档结构中的某些差异不太敏感。

也许是这样的:

/html/body//div/h1/a

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

XPATH还有许多其他选项可以正常工作。它还取决于HTML结构更改的频率。这也适用于引用的页面,以选择id

img

答案 1 :(得分:0)

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

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

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

非常感谢。