2016-10-02 3 views
1

Я пытаюсь изучить Jsoup с примером, я пытаюсь загрузить URL-адрес веб-сайта в Async Task. Но это загрузка только частичной, а не полной HTML-страницы. Я хочу удалить часть компонента, например, заголовок, нижний колонтитул и т. Д., И позволить ему отображать в WebView. Не уверен, что может отсутствовать:Jsoup не загружает полную HTML-страницу, она загружается только частично

Я попытался с несколькими вариантами:

Опции 1:

doc = Jsoup.connect("https://jsoup.org/discussion") 
        .header("Accept-Encoding", "gzip, deflate") 
        .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0") 
        .maxBodySize(0) 
        .get(); 

Варианты 2:

  doc = Jsoup.connect("https://jsoup.org/discussion").maxBodySize(0).timeout(50000).get(); 


class PageLoader extends AsyncTask<String, Void, Boolean> { 

    @Override 
    protected Boolean doInBackground(String... params) { 
     Document doc = null; 

     try { 
      doc = Jsoup.connect("https://jsoup.org/discussion").maxBodySize(0).timeout(50000).get(); 
      Logging.InfoLog(doc.toString()); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onPostExecute(Boolean aBoolean) { 
     super.onPostExecute(aBoolean); 
    } 
} 

ответ

1

Многие веб-страницы загрузки и рендеринга дополнительного контента через асинхронные вызовы JavaScript после страница загружается. JSoup возвращает только исходный HTML-код страницы.

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

+0

Спасибо @Andrei Volgin за ваш быстрый ответ. Я также проверю с помощью инструмента HtmlUnit. Я пытаюсь получить часть из динамической статической веб-страницы. Иногда мне хочется удалить верхний колонтитул, нижний колонтитул и т. Д. Я хочу показать страницу в Android WebView только с определенной частью (т. Е. Не полностью, как есть). Надеюсь, я смогу сделать это с помощью HtmlUnit. Любой другой хороший инструмент или предложение будут действительно полезными. Спасибо –

+0

@Abhrajyoti Kirtania Загрузите веб-представление в фоновом режиме, запустите javascript после завершения загрузки сайта (включая содержимое javascript), чтобы удалить/изменить содержимое, а затем отобразить веб-просмотр. По моему опыту HtmlUnit медленный и часто все еще не способен обрабатывать скрипты. В зависимости от контента иногда вы также можете использовать комбинацию jsoup и rhino, чтобы получить то, что вы хотите. –

+0

@ F.Klein, мне интересно, как загрузить полный HTML, я пытался с JSoup, но он не загружает полную HTML-страницу, которая является основной проблемой. Не могли бы вы предложить, какой будет лучший способ загрузить HTML-страницу. Я надеюсь, что когда загрузка будет успешной, JSoup можно использовать для анализа страницы, чтобы иметь полный контроль над страницей для любых модификаций и настроек. Вы предлагаете загружать необработанные html-данные через WebView, а затем конвертировать их в Document через JSoup? Или любая другая мысль, пожалуйста? –

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