如何从字符串创建HtmlUnit HTMLPage对象?

2022-09-02 09:55:58

这个问题已经问过一次了,但我想API改变了,答案不再有效。

URL url = new URL("http://www.example.com");
StringWebResponse response = new StringWebResponse("<html><head><title>Test</title></head><body></body></html>", url);
HtmlPage page = HTMLParser.parseHtml(response, new TopLevelWindow("top", new WebClient()));
System.out.println(page.getTitleText());

无法完成,因为TopLevelWindow受到保护,因此扩展/实现窗口之类的东西是荒谬的:)

有人知道如何做到这一点吗?在我看来,奇怪的是,这并不容易做到。


答案 1

此代码适用于 GroovyConsole

@Grapes(
    @Grab(group='net.sourceforge.htmlunit', module='htmlunit', version='2.8')
)

import com.gargoylesoftware.htmlunit.*
import com.gargoylesoftware.htmlunit.html.*

URL url = new URL("http://www.example.com");
StringWebResponse response = new StringWebResponse("<html><head><title>Test</title></head><body></body></html>", url);
WebClient client = new WebClient()
HtmlPage page = HTMLParser.parseHtml(response, client.getCurrentWindow());
System.out.println(page.getTitleText());

答案 2

使用HTMLUnit 2.40,Grooveek的代码将无法编译,你会得到“无法从HTMLParser类型对非静态方法parseHtml(WebResponse,WebWindow)进行静态引用”。但是现在有一个类 HtmlUnitNekoHtmlParser 实现 HTMLParser 接口,所以下面的代码有效:

StringWebResponse response = new StringWebResponse(
    "<html><head><title>Test</title></head><body></body></html>", 
    new URL("http://www.example.com"));
HtmlPage page = new HtmlUnitNekoHtmlParser().parseHtml(
    response, new WebClient().getCurrentWindow());

推荐