在 HtmlUnit

问题描述

大家! 我正在学习使用 HtmlUnit。我有问题。 当我单击锚点时,我的页面一个无法加载的 iFraMetag。 官方页面正常运行。

遵循我的代码: - 头 WebClient 客户端 = new WebClient(browserVersion.CHROME);

    CookieManager cookieManager = client.getCookieManager();
    cookieManager.setCookiesEnabled(true);
    client.setCookieManager(cookieManager);

    client.getoptions().setJavaScriptEnabled(true);
    client.setAjaxController(new NicelyResynchronizingAjaxController());
    client.getoptions().setThrowExceptionOnScriptError(false);
    client.getoptions().setThrowExceptionOnFailingStatusCode(false);
    client.getoptions().setCssEnabled(false);
    client.getoptions().setUseInsecureSSL(true);

--结束头

​​>
    (...)
    HtmlAnchor linkEdital =  (HtmlAnchor) pageEdital.getByXPath("//a[@data-acao='edital']").get(0);
    pageEdital = linkEdital.click();
    client.waitForBackgroundJavaScript(60000);
    System.out.println(pageEdital.asXml());

但是,变量 pageEdital 不会改变。

非常感谢。

解决方法

默认不包含 iframe 的内容,您必须自己查看。

这在这里有效(也许你可以减少等待时间)

public static void main(String[] args) throws Exception {
    try (final WebClient webClient = new WebClient(BrowserVersion.BEST_SUPPORTED)) {
        webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
        webClient.getOptions().setThrowExceptionOnScriptError(false);

        HtmlPage htmlPage = webClient.getPage("https://www.peintegrado.pe.gov.br/portal/Mural.aspx");
        webClient.waitForBackgroundJavaScript(20_000);

        DomNodeList tds = htmlPage.getElementsByTagName("td");
        HtmlTableDataCell td = (HtmlTableDataCell) tds.get(1);
        td.click();
        webClient.waitForBackgroundJavaScript(20_000);

        HtmlAnchor linkEdital = (HtmlAnchor) htmlPage.getByXPath("//a[@data-acao='edital']").get(0);
        linkEdital.click();
        webClient.waitForBackgroundJavaScript(20_000);

        System.out.println("********************");
        System.out.println(htmlPage.asXml());
        System.out.println("********************");

        // dig into the iframe yourself
        HtmlInlineFrame iframe = (HtmlInlineFrame) htmlPage.getElementById("frameResumoEdital");
        HtmlPage iPage = (HtmlPage) iframe.getEnclosedWindow().getEnclosedPage();
        System.out.println("********************");
        System.out.println(iPage.asText());
        System.out.println("********************");
    }
}

有关详细信息,请查看 https://github.com/HtmlUnit/htmlunit/issues/341

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...