2012-06-28 4 views
2

Когда я выполняю этот простой код, чтобы получить содержимое веб-сайта в виде текста, он показывает ошибки, которые я не могу понять.Ошибка при использовании HtmlUnit

import java.io.IOException; 
import java.net.MalformedURLException; 

import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; 
import com.gargoylesoftware.htmlunit.ScriptException; 
import com.gargoylesoftware.htmlunit.WebClient; 
import com.gargoylesoftware.htmlunit.html.HtmlPage; 

public class sd { 
    public static void main(String[] args) { 
     sd vip=new sd(); 
     try { 
      vip.homePage(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     System.out.print("sssss"); 
    } 

    public void homePage() throws Exception, ScriptException { 
     final WebClient webClient = new WebClient(); 
     final HtmlPage page =  
    (HtmlPage)webClient.getPage("http://timesofindia.indiatimes.com/"); 
     String pageAsText = page.asText(); 
     String pageAsXML = page.asXml(); 

     // System.out.println(pageAsXML); 
     System.out.println("////////////////////output//////////////////////////"); 
     System.out.println(pageAsText); 
     // System.out.println(pageAsXML); 
     System.out.println("////////////////////output ends//////////////////////////"); 
    } 

} 

ошибка, я получаю:

 
    ======= EXCEPTION START ======== 
Exception class=[com.gargoylesoftware.htmlunit.ScriptException] 
com.gargoylesoftware.htmlunit.ScriptException: Exception invoking jsxFunction_write 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:595) 
Caused by: java.lang.RuntimeException: Exception invoking jsxFunction_write 
Caused by: com.gargoylesoftware.htmlunit.ScriptException: Exception invoking jsxFunction_write 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:595) 

ответ

4

установить WebClient не бросать исключения JavaScript

webClient.setThrowExceptionOnScriptError (ложь);

Если не enougth, установите FF как поведение клиента при инициализации вашего веб-клиента.

webClient = новый WebClient (BrowserVersion.FIREFOX_3_6); webClient = новый WebClient (BrowserVersion.FIREFOX_10); // в зависимости от версии HtmlUnit

22

Метод WebClient::setThrowExceptionOnScriptError устарел с версии HtmlUnit версии 2.11. Используйте следующее в следующих версиях:

webClient.getOptions().setThrowExceptionOnScriptError(false); 
0

Даже у меня была эта ошибка. Этот параметр настройки WebClient для подавления ошибок работает для основных веб-сайтов. Но поскольку сайт становится сложным, он буквально терпит неудачу

После нескольких испытаний мне, наконец, пришлось выбрать Phantomjs. Он написан на C++. Мне пришлось написать scripts, а затем execute, используя phantomjs. Сценарий будет загружать URL-адрес и записывать данные в файл.

Как только этот файл будет готов, я напишу программу java для загрузки данных файла, а затем сделаю мои операции над этим файлом. Для загрузки и очистки данных я использовал Jsoup.

Как вы можете видеть, HtmlUnit, Jaunt, Jsoup поддерживают полный HTML, CSS. Их не хватает в том, что они полностью не поддерживают Javascript. Это основная причина ошибок, таких как Исключения, заполненные страницы, которые не загружаются и т. Д.

Смежные вопросы