如何在HtmlUnit中的页面请求和DOM响应之间增加一些等待时间?

时间:2019-08-14 19:55:19

标签: java htmlunit

enter image description here我正在尝试使用HtmlUnit获取与某个网页(https://digital.utc.com/our-latest)相关的所有链接,但是显然,它并没有检索页面内的所有链接

我试图在获取DOM之前为HtmlUnit添加一些等待时间,然后将其添加到HtmlPage中。我怀疑HtmlUnit会检索DOM并将其分配给htmlpage,一旦它使用“ WebClient.getpage()”,而页面没有任何时间从数据库加载数据。但我找不到使用HtmlUnit的任何方法

public void pageScrapping() throws FailingHttpStatusCodeException, MalformedURLException, IOException
    {
        //Initializing the WebClient 
        WebClient webClient = new WebClient();
        webClient.setThrowExceptionOnScriptError(false);
        webClient.setThrowExceptionOnFailingStatusCode(false);
        webClient.setCssEnabled(false);
        webClient.setJavaScriptEnabled(false);
        webClient.setTimeout(10000);

        HtmlPage page = webClient.getPage("https://digital.utc.com/our-latest");

        try 
        {
            Thread.sleep(3000);
        }

        catch (InterruptedException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        page = page.getPage();
        String htmlContent2 = page.asXml();
        File htmlFile2 = new File("Website2_XML.html");
        PrintWriter pw2 = new PrintWriter(htmlFile2);
        pw2.print(htmlContent2);
        pw2.close();

        System.out.println(page.getTitleText());

        DomNodeList<HtmlElement> links = (DomNodeList<HtmlElement>) page.getElementsByTagName("a");

        for (HtmlElement domElement : links) 
        {
            System.out.println(domElement.getAttribute("href"));
            System.out.println();
        }

    }
  • 我期望的是HtmlUnit将返回在网页中找到的具有“ href”属性的整个链接

  • 由HtmlUnit返回的实际结果有一些缺少的链接,即使浏览器检查器正确返回了该链接也无法从页面中获取

**缺少的链接将在右侧的窗体或文章列表中找到,该列表或条目从数据库中检索出

1 个答案:

答案 0 :(得分:0)

我看到(使用此代码)没有href的唯一链接是带有onClick处理程序的锚点。 您能补充一下您想念的内容的详细信息吗?

    final String url = "https://digital.utc.com/our-latest";

    try (final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_60)) {
        webClient.getOptions().setThrowExceptionOnScriptError(false);
        webClient.getOptions().setCssEnabled(false);;
        webClient.getOptions().setJavaScriptEnabled(false);

        HtmlPage page = webClient.getPage(url);
        webClient.waitForBackgroundJavaScript(4_000);

        System.out.println(page.asXml());

        DomNodeList<DomElement> links = page.getElementsByTagName("a");
        for (DomElement domElement : links)
        {
            String href = domElement.getAttribute("href");
            System.out.println(domElement.asXml());
        }
    }

一如既往,请确保您使用的是最新的SNAPSHOT版本。

更新:已对媒体查询处理进行了小修正,以避免在运行我的代码时遇到NPE。请使用最新的SNAPSHOT版本。