问题描述
大家! 我正在学习使用 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("********************");
}
}