htmlunit 解析 Html 版本 2.70

htmlunit parse Html version 2.70

提问人:carlos palma 提问时间:7/7/2023 最后编辑:carlos palma 更新时间:7/7/2023 访问量:51

问:

我一直在尝试将htmlunit(https://www.htmlunit.org/)从2.27版升级到2.70版。我注意到静态方法 HtmlParser.parseHtml() 不再存在。 我知道我现在必须实例化一个 HtmlUnitNekoHtmlParser。像这样的东西:

HTMLParser htmlParser = new HtmlUnitNekoHtmlParser();
HtmlPage htmlPage =new HtmlPage(tmpResponse,tmpWebWindow);
htmlParser.parse(tmpResponse, htmlPage, true, true);

但是,这会导致错误:

No script object associated with the Page. class: 'com.gargoylesoftware.htmlunit.html.HtmlPage'

根据这里的 javadoc:

https://javadoc.io/doc/net.sourceforge.htmlunit/htmlunit/latest/index.html

布尔值指示我们是否需要使用 XHtml 解析器,以及脚本是否由 javascript 创建。

我尝试了以下组合:

htmlParser.parse(tmpResponse, htmlPage, false, true)
Still the message No script object associated with the Page

htmlParser.parse(tmpResponse, htmlPage, false, false)
No script object associated with the Page

htmlParser.parse(tmpResponse, htmlPage, true, false)
No script object associated with the Page

在这个新版本的 htmlunit 中替换旧的 HtmlParser.parseHtml() 语句的正确方法是什么?

解析 html-解析 htmlunit

评论


答:

1赞 RBRi 7/7/2023 #1

哦,2.27 到 2.70 是一个巨大的进步。

选项 1:您只是喜欢解析字符串内容(请参阅 https://htmlunit.sourceforge.io/faq.html#HowToParseHtmlString)

你可以这样做......

try (WebClient webClient = new WebClient(browserVersion)) {
    final HtmlPage page = webClient.loadHtmlCodeIntoCurrentWindow(htmlCode);
    // work with the html page
}

选项 2:艰难的方法(一般来说,你必须做选项 1 中的 impl 所做的事情)

final HTMLParser htmlParser = webClient.getPageCreator().getHtmlParser();
final WebWindow webWindow = webClient.getCurrentWindow();

final HtmlPage page = new HtmlPage(webResponse, webWindow);
webWindow.setEnclosedPage(page);

htmlParser.parse(webResponse, page, false, false);

希望能有所帮助