Las solicitudes de Python dan como resultado que falta una parte de la página web

Estoy tratando de usar solicitudes para enviar un formulario y descargar la página web resultante. El problema es que a la página descargada le falta gran parte de la página que veo cuando lleno el formulario en un navegador.

Estoy tratando de ver un mapa de asientos en aa.com. Obtengo casi todo lo que no sea el mapa de asientos real.

from requests import session

def get_page():
    payload = {
        'airportLookupRequired': 'true',
        'currentCodeForm': 'originAirport',
        'currentCalForm': 'viewSeatsForm',
        'flightNumber': '1132',
        'departureMonth': '9',
        'departureDay': '22',
        'originAirport': 'dfw',
        'destinationAirport': 'lga',
        'cabin': 'coach',
        '_button_submit': 'GO'
    }

    with session() as c:
        c.post('https://www.aa.com/seatmap/viewSeatsAccess.do', payload)
        r = c.get('https://www.aa.com/seatmap/viewSeatsSubmit.do')
        print r.content.replace('/content/images', 'https://www.aa.com/content/images')      

get_page()

Cualquier sugerencia para solucionar esto o averiguar por qué no funciona sería apreciada.

EDITAR: usando las herramientas del navegador para buscar solicitudes de AJAX, veo

Resource interpreted as Script but transferred with MIME type text/plain: "https://www.aa.com/dwr/interface/SeatMapAjaxUtils.js". viewSeatsSubmit.do:52

Al hacer clic en eso, se accede a:

// Provide a default path to dwr.engine
if (dwr == null) var dwr = {};
if (dwr.engine == null) dwr.engine = {};
if (DWREngine == null) var DWREngine = dwr.engine;

if (SeatMapAjaxUtils == null) var SeatMapAjaxUtils = {};
SeatMapAjaxUtils._path = '/dwr';
SeatMapAjaxUtils.formatAmount = function(p0, p1, callback) {
  dwr.engine._execute(SeatMapAjaxUtils._path, 'SeatMapAjaxUtils', 'formatAmount', p0, p1, callback);
}
SeatMapAjaxUtils.getExitRowSeatSelectionResponse = function(p0, callback) {
  dwr.engine._execute(SeatMapAjaxUtils._path, 'SeatMapAjaxUtils', 'getExitRowSeatSelectionResponse', p0, callback);
}

que parece ser el código para generar la información que quiero. No sé cómo proceder a partir de ahí.

preguntado el 21 de septiembre de 13 a las 12:09

Lo más probable es que su navegador haya ejecutado algún código JavaScript que carga los datos adicionales a través de AJAX. Use las herramientas de desarrollo de su navegador para ver qué solicitudes AJAX se están realizando. -

¿Hay algo que se parezca a datos con formato JSON o HTML que le puedan interesar? Es posible que pueda llamar a esos puntos finales directamente. -

Está malinterpretando un recurso de secuencia de comandos regular para una solicitud AJAX. En Chrome, seleccione la pestaña de red y filtre solo por solicitudes XHR. -

Tendrás que analizar todos los recursos que el navegador descargar entonces. Compare lo que se descarga en la pestaña de red con lo que descarga Python para verificar que recibe la misma información, y luego analice cada recurso en detalle para ver dónde se almacena la información del asiento. -

No realmente, es solo sentido común sobre cómo la web funciona. Los navegadores cargan recursos de URL y los combinan en el navegador, interpretando esos recursos. Si eso incluye código ejecutable (por ejemplo, JavaScript), entonces la representación puede cambiar. JavaScript puede solicitar recursos adicionales. La forma en que se representa cada página puede variar salvajemente. No existe una solución única para todos. -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.