2017-05-12 25 views
0

我是HtmlUnit的新手。我嘗試了使用htmlunit加載網頁的簡單代碼,並使用xpath獲取特定的div標籤。 xpath是正確的。我已經驗證使用控制檯。NoClassDefFoundError Html單元

到目前爲止的代碼我想這是

import java.util.List; 

import com.gargoylesoftware.htmlunit.WebClient; 
import com.gargoylesoftware.htmlunit.html.HtmlElement; 
import com.gargoylesoftware.htmlunit.html.HtmlPage; 

public class Test { 

public static void main(String s[]) throws Exception 
{ 
    WebClient client = new WebClient(); 
    HtmlPage page = client.getPage("http://jpu1.pv.sv.nextag.com/serv/iinedan/buyer/outPdir.jsp?search=camera"); 

    List<?> items = page.getByXPath("//div[contains(@class,'search-result-cards')]//div[contains(@class,'listContainer')]"); 

    for(HtmlElement item : (List<HtmlElement>)items) 
    { 
     List<?> imageContainer; 

     imageContainer = item.getByXPath("//div[contains(@class,'imageContainer')]/a"); 

     System.out.println("Image container data length : "+imageContainer.size()); 

     System.out.println("Image "+imageContainer.toString()); 

    } 

    } 

} 

但是,當我執行此代碼,我面臨着以下例外。

Exception in thread "main" java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at Test.main(Test.java:11) 
Caused by: java.lang.ClassNotFoundException: 
org.w3c.dom.ElementTraversal 
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
... 37 more 

它似乎喜歡它的配置isssue。我從網站下載了jar,並將其添加到我的refrenced庫中。我使用的IDE是eclipse。 HtmlUnit版本爲htmlunit-2.13.jar

+0

可能重複[AppEngine Error \ [java.lang.NoClassDefFoundError:org/w3c/dom/ElementTraversal \]](http://stackoverflow.com/questions/10234201/appengine-error-java-lang-noclassdeffounderror- org-w3c-dom-elementtraversal) – vvtx

+0

http://stackoverflow.com/questions/17515333/noclassdeffounderror-org-w3c-dom-elementtraversal –

+0

請更新爲'2.26' –

回答

0

存在於htmlunit所依賴的庫xml-apis-1.4.01.jar中的org/w3c/dom/ElementTraversal。所以,作爲一個解決方案,您需要將此jar放入您的項目的類路徑中。

但是,htmlunit取決於庫的數量。可能會發生這樣的情況,在解決當前錯誤之後,您會爲其他某個類獲得noClassDefFoundError。

爲了解決它很容易,開始使用Maven。

  1. 創建一個maven項目。
  2. 添加依賴的HtmlUnit的條目中的pom.xml如下:

    <dependencies> 
    <dependency> 
        <groupId>net.sourceforge.htmlunit</groupId> 
        <artifactId>htmlunit</artifactId> 
        <version>2.13</version> 
    </dependency> 
    </dependencies> 
    
  3. 現在創建一個新的類,並添加您的代碼存在。

Maven將確保任何庫的所有傳遞依賴項都可用並自動將它們保留在項目類路徑中(如果在IDE中)。

+0

謝謝@shinchan,這是因爲我直接創建的一個普通的java項目和手動添加的jar。這是一個依賴性問題。 –

+0

對我來說,Maven不會遮擋它......如何解決這個問題? –

+0

你的意思是,依賴關係並沒有進入最終構建的工件文件夾? – Shinchan

0

許多jar包包括org.w3c.dom.ElementTraversal
例如xml-apis,batik-ext,jython
我認爲jar包衝突可能會導致你的問題。
你可以給更多的jar包版本細節?

+0

謝謝你!這是依賴性問題。 –