1

GroovyスクリプトでHtmlUnitを使用してWebページを解析しています。各要素の最終的なスタイルも取得できるようにしたいと思います。これは、ページ全体を反復処理し、要素と属性、そしてできればスタイルをダンプするテストスクリプトです。

少し掘り下げた後、http://old.nabble.com/Access-to-element-coputed-style-td24654513.htmlを見つけました。これにより、基本的なhtmlunitGrab呼び出しに彼が参照したクラスが含まれていないことがわかりました。com.gargoylesoftware.htmlunit.javascript.host.ComputedCSSStyleDeclaration

しかし、私はhttp://www.jarvana.com/jarvana/view/org/jvnet/hudson/htmlunit/2.2-hudson-9/htmlunit-2.2-hudson-9.jar!/com/gargoylesoftware/で情報を見つけComputedCSSStyleDeclarationました。 htmlunit / javascript / host / ComputedCSSStyleDeclaration.class?classDetails=ok

そのページの上部にあるIvy情報を使用して、必要なGrabステートメントを作成しました。ただし、これら2つのエントリは互いに競合しているようです。これが私のコードです:

@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スタイルに関連する2行のコメントを解除しようとすると、次のエラーが発生します。

キャッチ:java.lang.VerifyError:クラスcom.gargoylesoftware.htmlunit.javascript.host.HTMLElementは、finalメソッドjsxGet_tagName。()Ljava / lang/Stringをオーバーライドします。java.lang.VerifyError:クラスcom.gargoylesoftware.htmlunit.javascript.host.HTMLElementは、finalメソッドjsxGet_tagName。()Ljava / lang/Stringをオーバーライドします。

一方、2つのGrabステートメントの順序を逆にすると、次の例外が発生します。

キャッチ:groovy.lang.MissingPropertyException:そのようなプロパティはありません:クラスのFIREFOX_10:com.gargoylesoftware.htmlunit.BrowserVersion groovy.lang.MissingPropertyException:そのようなプロパティはありません:クラスのFIREFOX_10:com.gargoylesoftware.htmlunit.BrowserVersion at testHtmlUnit.run(testHtmlUnit .groovy:13)

これら2つの間には明らかに何らかの相互作用があります。hudson jarには、HtmlUnitの完全ではあるが古い実装が含まれているようです。これは、最後に来るときに現在の2.10バージョンをオーバーライドします。しかし、最初に来ると、上記のように、HTMLElementがJavaScript実装コードの何かと競合しているように見えます。

肝心なのは、HtmlUnitからCSSスタイルを取得する機能を追加したいということです。これが正しい方法である場合、私はこれらのjarファイルを一緒にうまく機能させる必要があります。これがそれらのスタイルを取得するための間違った方法である場合、私はそれを達成する方法について助けていただければ幸いです。いずれにせよ、ありがとう!

4

0 に答える 0