HTMLunit浏览器自动化导致SSL错误

时间:2016-04-11 15:31:58

标签: ssl htmlunit

我正在编写一段简单的Java代码,用于检查外部IP并更新我的DNS条目(如果已更改)。

我使用NetBeans和HTMLunit。代码的第一部分工作正常。 我的代码从WhatIsMyIp.com获取正确的外部IP地址

第二部分涉及登录我的DNS提供商网页(fastname.no),如下所示。

>  
>   public void LoginToDNS(HtmlPage LogInPage) throws Exception {
>     try (final WebClient webClient = new WebClient()) {
> 
>                     //get the webpage data we're looking for
>                     // also get the buttons and textfields
>                     final List<?> forms = LogInPage.getForms();
>                     final HtmlForm form = LogInPage.getFormByName("form1");        
>                     final HtmlTextInput UsernameField = form.getInputByName("username");        
>                     final HtmlPasswordInput PasswordField = form.getInputByName("password");
>                     final HtmlButton submit_button = form.getButtonByName("submit");
> 
>                     // Set the Username and pasword
>                     UsernameField.setValueAttribute("myusername");
>                     PasswordField.setValueAttribute("mypassword");
> 
>                     // submit the form by clicking the button and get back the control panel page
>                     final HtmlPage DNSPage = submit_button.click();
>                     CheckDNSEntries(DNSPage);
>                     
>         }
>     }


虽然我可以看到我已正确登录(我知道,因为页面标题更改为正确的页面标题),我看到一个SSL错误,结果网页不是我想要的。

java.util.concurrent.ExecutionException: java.io.IOException: Cannot init SSL
.... 
Caused by: java.io.IOException: Cannot init SSL
......
at org.eclipse.jetty.websocket.client.io.WebSocketClientSelectorManager.newConnection(WebSocketClientSelectorManager.java:96)

    ... 3 more

当我按下Submit_button时,我看到来自htmlunit的调试器上有很多错误。 (见下文)

Apr 12, 2016 10:36:49 AM com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError
SEVERE: runtimeError: message=[An invalid or illegal selector was specified (selector: '*,:x' error: Invalid selector: :x).] sourceName=[https://www.fastname.no/panel/js/custom/bootstrap.js?bust=?v20160408110428] line=[66] lineSource=[null] lineOffset=[0]
Apr 12, 2016 10:36:49 AM com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError
SEVERE: runtimeError: message=[An invalid or illegal selector was specified (selector: '*,:x' error: Invalid selector: :x).] sourceName=[https://www.fastname.no/panel/js/custom/bootstrap.js?bust=?v20160408110428] line=[66] lineSource=[null] lineOffset=[0]
Apr 12, 2016 10:36:51 AM com.gargoylesoftware.htmlunit.javascript.background.JavaScriptJobManagerImpl runSingleJob
SEVERE: Job run failed with unexpected RuntimeException: [object Object] (https://www.googletagmanager.com/gtm.js?id=GTM-TWH4RS&bust=?v20160408110428#65)
======= EXCEPTION START ========
Exception class=[net.sourceforge.htmlunit.corejs.javascript.JavaScriptException]
com.gargoylesoftware.htmlunit.ScriptException: [object Object] (https://www.googletagmanager.com/gtm.js?id=GTM-TWH4RS&bust=?v20160408110428#65)


Apr 12, 2016 10:36:52 AM com.gargoylesoftware.htmlunit.javascript.background.JavaScriptJobManagerImpl runSingleJob
SEVERE: Job run failed with unexpected RuntimeException: [object Object] (https://www.googletagmanager.com/gtm.js?id=GTM-TWH4RS&bust=?v20160408110428#65)
======= EXCEPTION START ========
Exception class=[net.sourceforge.htmlunit.corejs.javascript.JavaScriptException]
com.gargoylesoftware.htmlunit.ScriptException: [object Object] (https://www.googletagmanager.com/gtm.js?id=GTM-TWH4RS&bust=?v20160408110428#65)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.handleJavaScriptException(JavaScriptEngine.java:982)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:894)

2016-04-12 10:36:55.106:INFO::JS executor for com.gargoylesoftware.htmlunit.WebClient@d1a10ac: Logging initialized @10613ms
Apr 12, 2016 10:36:55 AM com.gargoylesoftware.htmlunit.javascript.host.WebSocket run
SEVERE: WS connect error
java.util.concurrent.ExecutionException: java.io.IOException: Cannot init SSL
    at org.eclipse.jetty.util.FuturePromise.get(FuturePromise.java:123)
    at com.gargoylesoftware.htmlunit.javascript.host.WebSocket$1.run(WebSocket.java:130)

我不太确定这是否是处理JavaScript的HTMLunit问题,或者只是我的代码。是否有更好的解决方案,我可以使用而不是HTMLunit,这将使我更快地走到哪里?毕竟我认为我想完成的任务相对简单。

1 个答案:

答案 0 :(得分:0)

尝试通过添加以下内容启用SSL:

webClient.getOptions().setUseInsecureSSL(true);

您可以找到更多文档here

修改 为了隐藏HtmlUnit日志,您必须添加以下内容:

LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");

java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF); 
java.util.logging.Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.OFF);