HtmlUnit - конвертировать HtmlPage в строку HTML? - PullRequest
6 голосов
/ 27 июня 2011

Я использую HtmlUnit для генерации HTML-кода для различных страниц, но сейчас лучшее, что я могу сделать, чтобы перевести страницу в необработанный HTML-код, возвращаемый сервером, - преобразовать HtmlPage в строку XML.

Это несколько раздражает, потому что вывод XML выводится веб-браузерами иначе, чем необработанный HTML.Есть ли способ конвертировать HtmlPage в необработанный HTML вместо XML?

Спасибо!

Ответы [ 6 ]

9 голосов
/ 30 июня 2011

page.asXml() вернет HTML.page.asText() возвращает его к тексту.

5 голосов
/ 28 июня 2011

Я не уверен на 100%, что правильно понял вопрос, но, возможно, это решит вашу проблему:

page.getWebResponse (). GetContentAsString ()

1 голос
/ 09 сентября 2015

Я думаю, что нет прямого способа получить конечную страницу в виде HTML. asXml () возвращает результат в виде XML, asText () возвращает извлеченное текстовое содержимое.

Лучшее, что вы можете сделать, это использовать asXml () и "преобразовать" его в HTML:

htmlPage.asXml().replaceFirst("<\\?xml version=\"1.0\" encoding=\"(.+)\"\\?>", "<!DOCTYPE html>")

(Конечно, вы можете применить больше преобразований, например преобразование
в
- это зависит от ваших требований.)

Даже связанная с документация Google рекомендует такой подход (хотя они не применяют никаких преобразований):

// return the snapshot
out.println(page.asXml());
0 голосов
/ 28 октября 2018

Вот мое решение, которое работает для меня:

ScriptResult scriptResult = htmlPage.executeJavaScript("document.documentElement.outerHTML;");
System.out.println(scriptResult.getJavaScriptResult().toString());
0 голосов
/ 15 мая 2015

Может быть, вы хотите пойти с чем-то вроде этого, вместо того, чтобы использовать методы платформы HtmlUnit:

try (InputStreamReader isr = new InputStreamReader(url.openConnection().getInputStream());
                 BufferedReader br = new BufferedReader(isr);){

        String line ="";
        String htmlSource ="";

        while((line = br.readLine()) != null)
        {
            htmlSource += line + "\n";
        }


        return htmlSource;

        } catch (IOException e) {
         // TODO Auto-generated catch block
            e.printStackTrace();
        }
0 голосов
/ 12 ноября 2012

Я не знаю ответа, кроме переключения типа страницы, а для XmlPage и SgmlPage нужно сделать innerHTML для элемента HTML и вручную выписать атрибуты. Не элегантный и точный (в нем отсутствует тип документа), но он работает.

Page.getWebResponse (). GetContentAsString ()

Это неверно, так как возвращает текстовую форму исходного не обработанного, без js байтов. Если javascript выполняется и меняет материал, то этот метод не увидит изменений.

page.asXml () вернет HTML. page.asText () возвращает его визуализацию в виде простого текста.

Просто хочу подтвердить, что это возвращает только текст внутри текстовых узлов и не включает теги и их атрибуты. Если вы хотите взять полный HTML-код, это не очень хорошая идея.

...