【问题标题】:Get the HTML page using htmlunit使用 htmlunit 获取 HTML 页面
【发布时间】:2019-05-27 22:07:15
【问题描述】:

我正在尝试获取网站的 HTML 页面(例如 http://htmlunit.sourceforge.net),但我收到 IllegalArgumentException 错误:无法找到声明的字段类 org.apache.http.impl.client.HttpClientBuilder.dnsResolver。我的代码如下:

public class Main1 {
    public static void main(String[] args) {
            try {
                homePage();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    public static void homePage() throws Exception {
            try (final WebClient webClient = new WebClient()) {
                final HtmlPage page = webClient.getPage("http://www.google.com");
                String text = page.asText();
                System.out.println(text);
            }
        }
    }

代码有问题吗?谢谢

【问题讨论】:

  • 为什么需要获取页面?你要解析它吗?
  • @Tugrul 是的,我实际上需要解析它,我正在阅读 htmlunit 可以解析页面的 html 和 javascript 元素。
  • 检查我的建议。
  • 看起来还不错,最好打印 stacktrance 以便我们跟踪正在发生的事情。可能你没有设置浏览器版本,没有设置webClient选项,所以错误存在。

标签: java htmlunit


【解决方案1】:

这是违反直觉的,但我们可以在 HtmlPageHtmlElement 上使用 asXml() 以将其作为 HTML/XML 表示形式。

page.asXml()

按照您编写代码的方式,它将返回一个文本表示形式,用于显示在浏览器上使用的内容。

你可能需要添加这个来启用 JavaScript:

webClient.options.setJavaScriptEnabled(true)

【讨论】:

    【解决方案2】:

    IllegalArgumentException:找不到声明的字段类 org.apache.http.impl.client.HttpClientBuilder.dnsResolver

    这看起来像是 HttpClient 依赖项的错误版本。请检查您的类路径,以确保每个依赖项只有一个(并且只有正确)版本。

    对于当前版本,您可以在此处找到依赖项列表 http://htmlunit.sourceforge.net/dependencies.html

    【讨论】:

      【解决方案3】:

      您可以使用jsoup parser

      小代码示例

      Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
      Elements newsHeadlines = doc.select("#mp-itn b a");
      

      高级用法

      File input = new File("/tmp/input.html");
      Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
      
      Element content = doc.getElementById("content");
      Elements links = content.getElementsByTag("a");
      for (Element link : links) {
        String linkHref = link.attr("href");
        String linkText = link.text();
      }
      

      有用的网址

      【讨论】:

      • Jsoup 无法解析 Javascript 元素对吗?我需要的实际上是可以让 HTML 包含 Javascript 的东西,因此我正在尝试 htmlunit
      • 如果您只需要 javascripts,只需使用任何网络抓取应用程序扩展 *.js 并将文件保存在本地存储中。然后,随心所欲地解析它们。
      • 我需要解析真实和当前页面,不幸的是,我想要的这个页面是一个单页应用程序,稍后将通过 javascript 获取所需的元素。如果我使用的是 Jsoup,那么它只会获取背景页面而不是我想要的当前元素。
      • 好的。忘记 jsoup。
      • @IhsanHaikal 见this related post
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多