Css HtmlUnit的两部分可以';不能共存
我正在Groovy脚本中使用HtmlUnit解析网页。我还希望能够检索每个元素的最终样式。这是一个测试脚本,它遍历整个页面并转储元素和属性,当然还有样式 经过一些挖掘,我发现,这使我发现基本的htmlunit抓取调用不包括他提到的类:Css HtmlUnit的两部分可以';不能共存,css,dom,groovy,htmlunit,Css,Dom,Groovy,Htmlunit,我正在Groovy脚本中使用HtmlUnit解析网页。我还希望能够检索每个元素的最终样式。这是一个测试脚本,它遍历整个页面并转储元素和属性,当然还有样式 经过一些挖掘,我发现,这使我发现基本的htmlunit抓取调用不包括他提到的类:com.gargoylesoftware.htmlunit.javascript.host.ComputedCSSSStyleDeclaration 但我确实在上找到了有关computedcsstyledeclaration的信息 我使用了页面顶部的常春藤信息来构造
com.gargoylesoftware.htmlunit.javascript.host.ComputedCSSSStyleDeclaration
但我确实在上找到了有关computedcsstyledeclaration
的信息
我使用了页面顶部的常春藤信息来构造我需要的抓取语句。然而,这两个条目似乎相互冲突。这是我的密码:
@Grab('org.jvnet.hudson:htmlunit:2.2-hudson-9')
@Grab('net.sourceforge.htmlunit:htmlunit:2.10')
import com.gargoylesoftware.htmlunit.*
import com.gargoylesoftware.htmlunit.javascript.host.*
RefreshHandler rh = new RefreshHandler() {
void handleRefresh( final Page page, final URL url, final int seconds ) {}
}
client = new WebClient(BrowserVersion.FIREFOX_10)
client.setRefreshHandler(rh)
client.javaScriptEnabled = false
client.appletEnabled = false
client.cssEnabled = true
page = client.getPage('http://www.google.com/')
parseChildren(page.documentElement)
def parseChildren(node) {
println "open ${node.nodeName}"
node.attributes.each { attr ->
println " ${attr.key}/${attr.value.name} = ${attr.value.value}"
}
//ComputedCSSStyleDeclaration style = ((HTMLElement)node.getScriptObject()).jsxGet_currentStyle()
//println " style: ${style.dump()}"
node.childElements.each { child ->
parseChildren(child)
}
println "close ${node.nodeName}"
}
如果我按照上面所示的顺序运行Grab语句,脚本运行得很好,但是没有样式信息。但是,如果我尝试取消注释与CSS样式相关的两行,则会出现以下错误:
捕获:java.lang.VerifyError:class com.gargoylesoftware.htmlunit.javascript.host.HTMLElement覆盖最终方法jsxGet_标记名。()Ljava/lang/String;
java.lang.VerifyError:class com.gargoylesoftware.htmlunit.javascript.host.HTMLElement覆盖最终方法jsxGet_标记名。()Ljava/lang/String
另一方面,如果我颠倒两个GRAP语句的顺序,则会出现以下异常:
捕获:groovy.lang.MissingPropertyException:没有这样的属性:FIREFOX\u 10 for class:com.gargoylesoftware.htmlunit.BrowserVersion
groovy.lang.MissingPropertyException:没有这样的属性:FIREFOX_10用于类:com.gargoylesoftware.htmlunit.BrowserVersion
运行(testHtmlUnit.groovy:13)
很明显这两者之间有某种互动。hudson jar似乎包含了一个完整但古老的HtmlUnit实现,它在最后一个版本时覆盖了当前的2.10版本。但当它首先出现时,如上所示,HtmleElement似乎与JavaScript实现代码中的某些内容相冲突
底线是,我想添加从HtmlUnit检索CSS样式的功能。如果这是正确的方法,我需要使这些罐子配合得很好。如果这是获取这些样式的错误方法,我将感谢您对如何实现这些样式的帮助。不管怎样,谢谢