2016-12-05 1 views
7

HtmlUnit을 사용하여 Google 페이지를 저장하려고합니다. 하지만 적절한 UI를 얻을 수 없습니다. 저장된 페이지 코드를 확인하면 스타일 태그가 비어 있습니다.HtmlUnit CSS가 제대로 적용되지 않았습니다.

내 코드는 여기에 있습니다.

public static void main(String[] args) throws IOException { 

    FileUtils.cleanDirectory(new File("/home/user1/Documents/Aaa")); 
    WebClient webClient = new WebClient(BrowserVersion.CHROME); 
    webClient.getOptions().setCssEnabled(true); 
    webClient.getOptions().setJavaScriptEnabled(true); 
    webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); 
    webClient.getOptions().setThrowExceptionOnScriptError(false); 
    webClient.waitForBackgroundJavaScriptStartingBefore(1000); 
    webClient.waitForBackgroundJavaScript(1000); 
    webClient.getOptions().setTimeout(5000); 
    System.out.println("******************loaded**********************************"); 
    try { 
     HtmlPage page = webClient.getPage("https://www.google.com"); 
     page.save(new File("/home/user1/Documents/Aaa/index.html")); 
    } catch (Exception e) { 
     System.out.println("******************catch***********************************"); 
     e.printStackTrace(); 
    } 
    webClient.close(); 
    System.out.println("******************finished********************************"); 
} 

그리고 내 페이지

enter image description here

콘솔과 같은

Dec 10, 2016 3:47:45 PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify 
WARNING: Obsolete content type encountered: 'text/javascript'. 
Dec 10, 2016 3:47:46 PM com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError 
SEVERE: runtimeError: message=[TypeError: object is not iterable] sourceName=[https://www.google.co.in/xjs/_/js/k=xjs.s.en.igGBAtxEWN0.O/m=sx,c,sb,cdos,cr,elog,hsm,jsa,r,qsm,j,p,d,csi/am=AAiUPF6wAOL_ISBuIRxBasDAoA/rt=j/d=1/t=zcms/rs=ACT90oGjQTdwqicso-l4vNE-7GeAqTtjtw] line=[10] lineSource=[null] lineOffset=[0] 
Dec 10, 2016 3:47:46 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error 
WARNING: CSS error: 'https://www.google.co.in/?gfe_rd=cr&ei=RtZLWL3cDsmL8QeW4Yb4AQ' [1:14018] Error in expression. (Invalid token " ". Was expecting one of: <NUMBER>, "inherit", <IDENT>, <STRING>, <HASH>, <EMS>, <EXS>, <LENGTH_PX>, <LENGTH_CM>, <LENGTH_MM>, <LENGTH_IN>, <LENGTH_PT>, <LENGTH_PC>, <ANGLE_DEG>, <ANGLE_RAD>, <ANGLE_GRAD>, <TIME_MS>, <TIME_S>, <FREQ_HZ>, <FREQ_KHZ>, <RESOLUTION_DPI>, <RESOLUTION_DPCM>, <PERCENTAGE>, <DIMENSION>, <URI>, <FUNCTION>, "progid:".) 
Dec 10, 2016 3:47:46 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error 
WARNING: CSS error: 'https://www.google.co.in/?gfe_rd=cr&ei=RtZLWL3cDsmL8QeW4Yb4AQ' [1:14042] Error in expression. (Invalid token " ". Was expecting one of: <NUMBER>, "inherit", <IDENT>, <STRING>, <HASH>, <EMS>, <EXS>, <LENGTH_PX>, <LENGTH_CM>, <LENGTH_MM>, <LENGTH_IN>, <LENGTH_PT>, <LENGTH_PC>, <ANGLE_DEG>, <ANGLE_RAD>, <ANGLE_GRAD>, <TIME_MS>, <TIME_S>, <FREQ_HZ>, <FREQ_KHZ>, <RESOLUTION_DPI>, <RESOLUTION_DPCM>, <PERCENTAGE>, <DIMENSION>, <URI>, <FUNCTION>, "progid:".) 
Dec 10, 2016 3:47:46 PM com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine handleJavaScriptException 
INFO: Caught script exception 
======= EXCEPTION START ======== 
EcmaError: lineNumber=[551] column=[0] lineSource=[null] name=[TypeError] sourceName=[https://www.google.co.in/xjs/_/js/k=xjs.s.en.igGBAtxEWN0.O/m=sx,c,sb,cdos,cr,elog,hsm,jsa,r,qsm,j,p,d,csi/am=AAiUPF6wAOL_ISBuIRxBasDAoA/rt=j/d=1/t=zcms/rs=ACT90oGjQTdwqicso-l4vNE-7GeAqTtjtw] message=[TypeError: Cannot read property "Kf" from undefined (https://www.google.co.in/xjs/_/js/k=xjs.s.en.igGBAtxEWN0.O/m=sx,c,sb,cdos,cr,elog,hsm,jsa,r,qsm,j,p,d,csi/am=AAiUPF6wAOL_ISBuIRxBasDAoA/rt=j/d=1/t=zcms/rs=ACT90oGjQTdwqicso-l4vNE-7GeAqTtjtw#551)] 
com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot read property "Kf" from undefined (https://www.google.co.in/xjs/_/js/k=xjs.s.en.igGBAtxEWN0.O/m=sx,c,sb,cdos,cr,elog,hsm,jsa,r,qsm,j,p,d,csi/am=AAiUPF6wAOL_ISBuIRxBasDAoA/rt=j/d=1/t=zcms/rs=ACT90oGjQTdwqicso-l4vNE-7GeAqTtjtw#551) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:921) 
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:628) 
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:515) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:852) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:824) 
    at com.gargoylesoftware.htmlunit.InteractivePage.executeJavaScriptFunctionIfPossible(InteractivePage.java:216) 
    at com.gargoylesoftware.htmlunit.javascript.host.event.EventListenersContainer.executeEventListeners(EventListenersContainer.java:258) 
    at com.gargoylesoftware.htmlunit.javascript.host.event.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:322) 
    at com.gargoylesoftware.htmlunit.javascript.host.event.EventTarget.fireEvent(EventTarget.java:206) 
    at com.gargoylesoftware.htmlunit.javascript.host.Window.dispatchEvent(Window.java:2033) 
    at com.gargoylesoftware.htmlunit.javascript.host.Window$2$1.run(Window.java:2119) 
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:628) 
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:515) 
    at com.gargoylesoftware.htmlunit.javascript.host.Window$2.execute(Window.java:2124) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:966) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.access$500(JavaScriptEngine.java:101) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:916) 
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:628) 
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:515) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:852) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:824) 
    at com.gargoylesoftware.htmlunit.InteractivePage.executeJavaScriptFunctionIfPossible(InteractivePage.java:216) 
    at com.gargoylesoftware.htmlunit.javascript.host.event.EventListenersContainer.executeEventListeners(EventListenersContainer.java:258) 
    at com.gargoylesoftware.htmlunit.javascript.host.event.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:322) 
    at com.gargoylesoftware.htmlunit.javascript.host.event.EventTarget.fireEvent(EventTarget.java:191) 
    at com.gargoylesoftware.htmlunit.html.DomElement$2.run(DomElement.java:1190) 
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:628) 
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:515) 
    at com.gargoylesoftware.htmlunit.html.DomElement.fireEvent(DomElement.java:1195) 
    at com.gargoylesoftware.htmlunit.html.DomElement.fireEvent(DomElement.java:1163) 
    at com.gargoylesoftware.htmlunit.InteractivePage.setFocusedElement(InteractivePage.java:100) 
    at com.gargoylesoftware.htmlunit.InteractivePage.setFocusedElement(InteractivePage.java:66) 
    at com.gargoylesoftware.htmlunit.html.HtmlElement.detach(HtmlElement.java:1254) 
    at com.gargoylesoftware.htmlunit.html.DomNode.remove(DomNode.java:1132) 
    at com.gargoylesoftware.htmlunit.html.DomNode.replace(DomNode.java:1210) 
    at com.gargoylesoftware.htmlunit.javascript.host.dom.Node.replaceChild(Node.java:444) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at net.sourceforge.htmlunit.corejs.javascript.MemberBox.invoke(MemberBox.java:153) 
    at net.sourceforge.htmlunit.corejs.javascript.FunctionObject.call(FunctionObject.java:448) 
    at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1540) 
    at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:800) 
    at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105) 
    at net.sourceforge.htmlunit.corejs.javascript.NativeArray.iterativeMethod(NativeArray.java:1694) 
    at net.sourceforge.htmlunit.corejs.javascript.NativeArray.execIdCall(NativeArray.java:405) 
    at net.sourceforge.htmlunit.corejs.javascript.IdFunctionObject.call(IdFunctionObject.java:94) 
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2575) 
    at net.sourceforge.htmlunit.corejs.javascript.BaseFunction.execIdCall(BaseFunction.java:321) 
    at net.sourceforge.htmlunit.corejs.javascript.IdFunctionObject.call(IdFunctionObject.java:94) 
    at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1540) 
    at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:800) 
    at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105) 
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:413) 
    at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:252) 
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3264) 
    at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:115) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$3.doRun(JavaScriptEngine.java:794) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:906) 
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:628) 
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:515) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:803) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:779) 
    at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:975) 
    at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:352) 
    at com.gargoylesoftware.htmlunit.html.HtmlScript$2.execute(HtmlScript.java:238) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:966) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.access$500(JavaScriptEngine.java:101) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:916) 
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:628) 
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:515) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:852) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:824) 
    at com.gargoylesoftware.htmlunit.InteractivePage.executeJavaScriptFunctionIfPossible(InteractivePage.java:216) 
    at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptFunctionJob.runJavaScript(JavaScriptFunctionJob.java:52) 
    at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptExecutionJob.run(JavaScriptExecutionJob.java:102) 
    at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptJobManagerImpl.runSingleJob(JavaScriptJobManagerImpl.java:426) 
    at com.gargoylesoftware.htmlunit.javascript.background.DefaultJavaScriptExecutor.run(DefaultJavaScriptExecutor.java:157) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: net.sourceforge.htmlunit.corejs.javascript.EcmaError: TypeError: Cannot read property "Kf" from undefined (https://www.google.co.in/xjs/_/js/k=xjs.s.en.igGBAtxEWN0.O/m=sx,c,sb,cdos,cr,elog,hsm,jsa,r,qsm,j,p,d,csi/am=AAiUPF6wAOL_ISBuIRxBasDAoA/rt=j/d=1/t=zcms/rs=ACT90oGjQTdwqicso-l4vNE-7GeAqTtjtw#551) 
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3915) 

이 경우에 대한 어떤 생각을 기록?

편집 : CSS3 필터 속성을 사용할 때 오류가 발생한다고 생각합니다. 이런 Google 페이지 코드에서.

filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4387fd,endColorstr=#4683ea,GradientType=1) 

이 필터에는 콜론이 있고 progrid에는 콜론이 있습니다. 따라서 CSS 구문 분석 오류가 발생합니다. 이것에 대한 해결책은 무엇입니까? 처음에는

+0

표시 할 콘솔 메시지는 무엇입니까? –

+0

WebClient 대신에''index.html''을 표시하고 싶다고 생각하고''webClient.close();''... –

+0

에 주석을 달아보십시오.이 줄 webClient.close()도 같은 경우 결과 – Anbarasan

답변

2

는 :

WARNING: CSS error: 'https://www.google.co.in/?gfe_rd=cr&ei=hyxFWPuPJMyL8QfigajQCw' 

이 경고는 더 많거나 적은 CSS를 파서가 주어진 CSS 규칙 중 하나를 좋아하지 않는다는 것을 의미한다. 이는 페이지의 js 코드가 html 요소에 스타일을 요청하면 형식 정보가 누락 될 수 있으므로 실제 영향은 없습니다. 주어진 장소가 의미가에서 이러한 호출을 수행 -

둘째

webClient.waitForBackgroundJavaScriptStartingBefore(1000); 
webClient.waitForBackgroundJavaScript(1000); 

이 두 호출에는 구성 옵션이 없습니다.

그러나 모두가 사소한 것들, 당신이 가지고있는 유일한 진짜 문제는

com.gargoylesoftware.htmlunit.ScriptException: Exception invoking constructor 

예외입니다. 이것은 대개 페이지의 js 처리를 중지하지만 (ThrowExceptionOnScriptError를 false로 설정했기 때문에 사용자가 처리하지 못합니다).

문제를 분석하려면 적어도 생성자가 throw 한 예외의 스택 추적이 필요합니다. 일반적으로이 스택 추적은 로그의 일부이기도합니다.

하지만 더 간단한 해결책이있을 수 있습니다. 사용중인 HtmlUnit 버전에 대한 정보를 제공하지 않았습니다. SNAPSHOT의 최신 빌드를 사용하도록 제안합니다 (http://htmlunit.sourceforge.net/gettingLatestCode.html에 들어가는 방법에 대한 정보를 찾을 수 있습니다). 나는 최신 htmlunit 코드로 빠른 테스트를 수행했으며 예외없이 페이지를 가져올 수있었습니다.

public static void main(String[] args) throws IOException { 

    FileUtils.cleanDirectory(new File("c://temp/htmlunit/aa")); 
    WebClient webClient = new WebClient(BrowserVersion.CHROME); 
    webClient.getOptions().setCssEnabled(true); 
    webClient.getOptions().setJavaScriptEnabled(true); 
    webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); 
    webClient.getOptions().setThrowExceptionOnScriptError(false); 
    webClient.getOptions().setTimeout(5000); 
    System.out.println("******************loaded**********************************"); 
    try { 
     HtmlPage page = webClient.getPage("https://www.google.com"); 
     webClient.waitForBackgroundJavaScriptStartingBefore(1000); 
     webClient.waitForBackgroundJavaScript(1000); 
     page.save(new File("c://temp/htmlunit/aa/index.html")); 
    } catch (Exception e) { 
     System.out.println("******************catch***********************************"); 
     e.printStackTrace(); 
    } 
    webClient.close(); 
    System.out.println("******************finished********************************"); 
} 
+0

안녕하세요, 2.23 최신 버전으로 업데이트했습니다.하지만 progrid : 예외 및 CSS 적용되지 않습니다. 그리고 업데이트 된 버전에 대한 콘솔 로그를 업데이트하십시오. – Anbarasan

+0

(1) 내 제안은 최신 스냅 샷으로 업데이트하는 것이 었습니다. ... (2) 다시 ccs 것은 경고입니다 .... (3) 그리고 마지막으로 com.gargoylesoftware.htmlunit.ScriptException : TypeError : 속성을 읽을 수 없습니다. 이것은 (적어도 부분) 페이지의 스크립트가 작동하지 않습니다. 최신 SNAPSHOT 버전의 HtmlUnit에이 문제가 계속 발생하면 문제를 열어야합니다. 그러나 주먹은 http://htmlunit.sourceforge.net/submittingJSBugs.html에서 확인하십시오. – RBRi

+0

또 다른 가능한 문제점은 덤프 된 페이지 일 수 있습니다. 이 페이지에는 여전히 로컬 파일 시스템에 대한 링크와 인터넷에 대한 링크가 있습니다. 어쩌면이 링크 중 하나가 고장 났을 수도 있습니다. – RBRi

관련 문제