Navegador Java SWT: Esperando a que la página dinámica esté completamente cargada
javascript asp-classic (1)
window.onload = function () {
alert("Everything loaded")
}
onload
espera hasta que todos los recursos estén cargados y ejecutará el código contenido, es decir, iniciará una alerta.
Tenga en cuenta, sin embargo, que la onload
podría no funcionar en algunos escenarios. Si no recuerdo mal, a veces no funciona si usa los botones hacia atrás y hacia adelante del navegador.
Estoy trabajando con la clase de navegador SWT y tengo un problema. Intento copiar el origen de la página desde una página en la que la mayoría de los datos se cargan dinámicamente con el uso de ASP. El problema es que, por supuesto, el evento completado del detector de eventos del navegador se activa antes de que se muestre todo el contenido de la página. Aquí hay una parte de mi código:
class GermaniaProgressListener implements ProgressListener {
final Browser browser;
Calendar calen;
SimpleDateFormat dateFormat;
static Integer counter;
static Integer changeCounter;
static Integer completeCounter;
public GermaniaProgressListener(Browser browser, Calendar calen, SimpleDateFormat dateForm) {
super();
this.browser = browser;
this.calen = calen;
this.dateFormat = dateForm;
counter = 1;
}
public void changed(ProgressEvent event) {
}
@Override
public void completed(ProgressEvent arg0) {
String pageContent = "";
if(counter > 1) {
try {
pageContent = (String)browser.evaluate("return document.body.innerHTML");
FileUtilities.writeFile(
FilePaths.GERMANIA_HTML.getFilePath().replace(".", ((Integer)(counter-1)).toString() + "."),
pageContent);
} catch (IOException e) {
e.printStackTrace();
LoggingUtilities.logException(e);
BrowserUtilities.closeBrowser(browser);
}
}
if(counter < 8) {
String strDate = dateFormat.format(calen.getTime());
Boolean ret = browser.execute("this.controler.loadPage(0, '''', ''d=" + strDate + "'')");
if(!ret) {
LoggingUtilities.logString("Error getting germania pages");
BrowserUtilities.closeBrowser(browser);
return;
}
calen.add(Calendar.DATE, 1);
counter++;
} else {
BrowserUtilities.closeBrowser(browser);
}
}
};
public class PageDowGermania {
static public void getPageContent() {
final Browser browser = BrowserUtilities.createBrowser();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
Calendar calen = Calendar.getInstance();
calen.setTime(new Date());
GermaniaProgressListener fpl = new GermaniaProgressListener(browser, calen, dateFormat);
browser.addProgressListener(fpl);
BrowserUtilities.startBrowser(browser, "http://www.germaniasport.hr");
}
}
No soy un experto en páginas web dinámicas, así que tal vez alguien podría ayudarme si existe alguna posibilidad, por ejemplo, un script en JavaScript que pueda verificar si la página está completamente cargada.
Gracias por adelantado