我正在使用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”]
我该如何处理?
解决方法
第一个答案:
/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将起作用.它可能看起来奇怪/短(并且可能不是最有效的),但是//从根节点开始并查看树中的每个节点,*匹配任何元素(包括img)和[]谓词过滤器将其限制为具有id属性值等于“gmi-ResViewSizer_img”的id属性.
XPATH还有许多其他选项可以使用.它还取决于HTML结构的变化频率.这个也适用于引用以选择img的页面:
/html/body/div/div/div/div/img[1]