2017-05-12 7 views
0

저는 HtmlUnit을 처음 사용합니다. htmlunit을 사용하여 웹 페이지를로드하고 xpath를 사용하여 특정 div 태그를 얻는 간단한 코드를 시도했습니다. xpath가 정확합니다. 콘솔 사용을 확인했습니다. 지금까지 내가 노력NoClassDefFoundError Htmlunit

코드는

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 

구성이 좋아 보이는 것 같습니다. 사이트에서 항아리를 다운로드하고 그것을 내 refrenced 라이브러리에 추가했습니다. 내가 사용하고있는 IDE는 일식입니다. HtmlUnit 버전은 htmlunit-2.13.jar입니다.

+0

[AppEngine 오류 \ [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입니다. 따라서 솔루션으로이 항아리를 프로젝트의 클래스 경로에 넣어야합니다.

그러나 htmlunit은 라이브러리의 수에 따라 다릅니다. 그리고 현재 오류를 해결 한 후에 다른 클래스에 대해 noClassDefFoundError를 얻을 수 있습니다.

쉽게 해결하려면 Maven을 사용하십시오.

  1. 메이븐 프로젝트를 만듭니다. 다음과 같이
  2. 는 pom.xml 파일에 HtmlUnit과 의존성에 대한 항목을 추가
    <dependencies> 
    <dependency> 
        <groupId>net.sourceforge.htmlunit</groupId> 
        <artifactId>htmlunit</artifactId> 
        <version>2.13</version> 
    </dependency> 
    </dependencies> 
    
  3. 지금 새로운 클래스를 생성하고이 코드를 추가합니다.

Maven은 모든 라이브러리의 전이 의존성을 사용 가능하게하고 프로젝트 클래스 경로에 자동으로 유지합니다 (IDE의 경우).

+0

@shinchan에 감사드립니다. 직접 작성했기 때문에 일어났습니다. 일반 Java 프로젝트 및 수동으로 병을 추가했습니다. 그것은 의존성 문제였습니다. –

+0

나를 위해, 메이븐 (Maven)은 그것을 음영 처리하지 않습니다 ... 어떻게 수정합니까? –

+0

최종 빌드 된 이슈 폴더에 의존성이 나타나지 않았습니까? – Shinchan

0

많은 병 패키지는 org.w3c.dom.ElementTraversal을 포함합니다.
xml-apis, batik-ext, jython 등이있다.
항아리 패키지 충돌로 문제가 발생할 수 있다고 생각합니다.
더 많은 패키지 버전 정보를 제공 할 수 있습니까?

+0

고마워요! 그것은 의존성 문제였습니다. –