我正在使用HtmlUnitDriver,这是我的代码。
HtmlUnitDriver driver = new HtmlUnitDriver(true);
driver.get("some url here");
我收到以下异常:
Caused by: com.gargoylesoftware.htmlunit.ScriptException: Wrapped com.gargoylesoftware.htmlunit.ScriptException: SyntaxError: missing ; before statement (http://sales.liveperson.net/hcp/html/mTag.js?site=7824460#1(eval)#1)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:595)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:545)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:520)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:896)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventListeners(EventListenersContainer.java:162)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:221)
at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:735)
at com.gargoylesoftware.htmlunit.html.HtmlElement$2.run(HtmlElement.java:866)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538)
at com.gargoylesoftware.htmlunit.html.HtmlElement.fireEvent(HtmlElement.java:871)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeEventHandlersIfNeeded(HtmlPage.java:1162)
at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:202)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:440)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:311)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:373)
at org.openqa.selenium.htmlunit.HtmlUnitDriver.get(HtmlUnitDriver.java:346)
... 8 more
请帮我解决这个问题。
参考此类问题提出了许多问题。引发ScriptException
是因为您的 JavaScript 中存在语法错误。大多数浏览器即使有某种错误也能解释JS,但HtmlUnit在这个意义上有点不灵活。
您的选择是:
- 正确的 JS 代码
- 在
WebClient
中禁用 JS - 不要使用 HtmlUnit。使用具有更好JS支持的不同框架,例如PhantomJS(请注意,它不是基于Java的框架)
_webClient.getOptions().setThrowExceptionOnScriptError(false);
在这个不正确的JS场景中工作。
我在真人mTag上遇到了同样的错误.js
问题出在压缩的 mTag.js 响应上。
有几种解决方法:
- 将压缩的 mTag .js替换为一个清晰的 mTag(需要 LivePerson 支持)
- 使用"真正的"Selenium WebDriver(Firefox Driver或类似驱动程序)