Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Obtener contenido de una página web que contiene AJAX

Tengo hecho un clase que extrae el el html de una url determinada y me funciona, pero el problema es cuando esa página dentro de ella genera código html al cargar a través de AJAX, ese código no me lo recupera,

Tengo hecho algo del estilo:


try {
URL u = new URL("http://www.google.es");
URLConnection conn = u.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;

while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
}
in.close();
} catch (Exception ex) {
//Error a tratar
}

Cómo podría hacerlo, para que si dentro de la página al cargar hay una parte de javascript que mediante ajax se trae código html también lo pueda visualizar ¿?

junio 27, 2014 | Unregistered CommenterJulio

Buenas,

Con la llamada recuperas el codigo estatico HTML. No puedes nunca recuperar el codigo que se genera dinamicamente en la pagina en funcion de los eventos y/o llamadas asincronas que se produzcan.
Como mucho podrias tratar de intentar parsear e interpretar el codigo para localizar posibles llamadas ajax e invocarlas desde java con los parametros adecuados para recuperar asi la respuesta, que puede ser HTML... o no (normalmente sera JSON que luego se interpreta, por ejemplo).
Salvo que sea un caso muy muy simple, yo lo veo inviable, la verdad. Suerte

Un saludo

junio 27, 2014 | Unregistered CommenterUnoPorAhi

Guenas.

LLamalo. Trata despues lo que te responda como parte de lo que ha leido.

Ojo, ten en cuenta que jamas debes tomar una resuesta dinamica como una respuesta estatica.

Esa respuesta que obtendrás es fija para lo que pidas. Como te dijo otro compañero, en una respuesta dinámica no puedes ejercer un trato determinado.

Si necesitas hacer esto el diseñador/analista debe ser expulsado del equipo por incompetente. Nadie puede pedir esto a menos que sea un tanto inútil.

Un saludo

junio 27, 2014 | Unregistered CommenterPaposo

Gracias por vuestras respuestas, la cosa es más sencilla, no es una página que en función de los eventos que se produzcan mediante AJAX recargue lo que sea con la información obtenida.

Es una página html que al cargar en medio del html, hace una llamada a una función javascript que mediante ajax carga un listado, porque lo hacen así no le encuentro sentido, pero el caso es que a mi me ha tocado parsear esa información y claro lo primero es poder al cargar la página que me cargara también ese listado.

junio 27, 2014 | Unregistered Commenterjulio

Pues lo dicho, no hay milagros. Tienes que currártelo y hacer lo mismo que el navegador.

El navegador renderiza la página que ha obtenido y cuando está interpretándola, se da cuenta de que hay que hacer una llamada Ajax para obtener contenido, por lo que realiza otra nueva llamada http para recuperar dicha información e incrustarla en el código.
Tienes que verificar cual es la url a la que invoca esa llamada ajax y llamarla tu mediante java. Eso si, seguramente tendrás que pasarle parámetros específicos para que funcione.

Por ejemplo, cuando se carga, google.com hace (entre otras) una llamada como esta:
https://plus.google.com/u/0/_/notifications/frame?sourceid=1&hl=fr&origin=https%3A%2F%2Fwww.google.com&uc=1&jsh=m%3B%2F_%2Fscs%2Fabc-static%2F_%2Fjs%2Fk%3Dgapi.gapi.en.ZQr08mMOyEQ.O%2Fm%3D__features__%2Frt%3Dj%2Fd%3D1%2Frs%3DAItRSTNFlraBrjkV5aQW9uTj_6QHaoO_0A

Que le devuelve un enorme JSON que luego interpreta mediante javascript.

Porqué se hacen esas cosas? Por varios motivos... como por ejemplo evitar que la gente haga lo que tu estás intentado hacer.


Un saludo

junio 27, 2014 | Unregistered CommenterUnoPorAhi

Estos escenarios pueden ser resueltos con herramientas como PhantomJS, basicamente requieres tener un browser completamente a tu disposiciòn para poder "leer" lo que las llamadas AJAX generan.... no hay otra manera :(

http://phantomjs.org/

julio 7, 2014 | Registered Commenterrugi