【问题标题】:Tag Iframe doesn't work after click Anchor in HtmlUnit在 HtmlUnit 中单击锚点后标记 Iframe 不起作用
【发布时间】:2021-04-12 16:23:38
【问题描述】:

大家! 我正在学习使用 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 没有改变。

非常感谢。

【问题讨论】:

  • 您使用的页面是公开的吗?
  • 嗨@RBRi,你好吗?是的,链接是:peintegrado.pe.gov.br/portal/Mural.aspx
  • 我点击网格中的一行并打开其他页面。在这里,有一个链接(锚)“编辑”,当我单击加载 iframe 时。但我正在努力,却无法工作。
  • 我很好,希望你也一样。我会尽力提供帮助,请在 github 上打开一个问题并提供更多代码。我会比看看。
  • 乍一看,我认为您喜欢单击的元素不可见。在 HtmlUnit 忽略 click() 调用的情况下(只向日志写入提示)

标签: javascript iframe htmlunit


【解决方案1】:

默认情况下不包含 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

【讨论】:

  • 对不起!但我需要你的帮助!还有另一个类似这个问题的页面,你帮我一个get tag iframe。但是这个新页面总是显示错误:2021-05-05 12:51:05.265 ERROR 1858 --- [cTaskExecutor-1] c.g.h.j.DefaultJavaScriptErrorListener : JavaScript 执行期间出错 com.gargoylesoftware.htmlunit.ScriptException: innerText 是只读的对于标签“html”(compras.cetiqt.senai.br/Portal/Scripts/…
  • 再次,请您打开一个问题...看看。
猜你喜欢
  • 2012-08-26
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多