He creado un script para obtener los elementos html de una página de destino enviando dos solicitudes https posteriormente. Mi script puede hacer la cosa sin problemas. Sin embargo, tuve que copiar los cuatro valores de las herramientas de desarrollo de Chrome para completar las cuatro claves payloadpara enviar las solicitudes HTTP finales para llegar a la página de destino. Este es el enlace de inicio y a continuación se encuentra la descripción de cómo podría llegar a la página de destino.
- Haga clic en el
Find Hotelbotón (no es necesario cambiar las fechas si lachek-outfecha es por lo menos un día más larga que lacheck-infecha). - Marque la casilla como la imagen de abajo y presione el
Book Nowbotón justo encima de ella. Ahora, debería llevarte a la página de destino automáticamente. - Al llegar a la página de destino titulada como
Enter Guest Details, analiza los elementos html desde allí
He intentado con (trabajando uno):
import requests
from bs4 import BeautifulSoup
url = 'https://booking.discoverqatar.qa/SearchHandler.aspx?'
second_url = 'https://booking.discoverqatar.qa/PassengerDetails.aspx?'
params = {
'Module':'H','txtCity':'','hdnCity':'2947','txtHotel':'','hdnHotel':'',
'fromDate':'05/11/2019','toDate':'07/11/2019','selZone':'','minSelPrice':'',
'maxSelPrice':'','roomConfiguration':'2|0|','noOfRooms':'1',
'hotelStandardArray':'63,60,54,50,52,51','CallFrom':'','DllNationality':'-1',
'HdnNoOfRooms':'-1','SourceXid':'MTEzNzg=','mdx':''
}
payload = {
'CallFrom':'MToxNjozOCBQTXxCMkN8MToxNjozOCBQTQ==',
'Btype':'MToxNjozOCBQTXxBfDE6MTY6MzggUE0=',
'PaxConfig':'MToxNjozOCBQTXwyfDB8MnwwfHwxOjE2OjM4IFBN',
'usid':'MToxNjozOCBQTXxoZW54dmkzcWVnc3J3cXpld2lsa2ZwMm18MToxNjozOCBQTQ=='
}
with requests.Session() as s:
r = s.get(url,params=params,headers={"User-agent":"Mozilla/5.0"})
res = s.get(second_url,params=payload,headers={
"User-agent":"Mozilla/5.0",
"Referer":r.url
})
soup = BeautifulSoup(res.text,'lxml')
print(soup)
En la secuencia de comandos que he copiado y pegado el valor de CallFrom, Btype, PaxConfigy usiddesde dev herramientas para su uso dentro payload.
¿Cómo puedo completar los valores automáticamente para usarlos dentro de la carga útil?
fuente


Btypepodría ser un valor dinámico correspondiente a las opciones elegidas en el primer paso.PaxConfigtambién podría estar en un formato diferente si los pasajeros incluyen niños.Respuestas:
Los parámetros enviados a la segunda solicitud están codificados en Base64 , después de la decodificación son:
A primera vista, ya notas que están en patrones de:
¿Dónde
$dateestá la hora actual en el formato deutc_ts_now.strftime("%I:%M:%S %p").Para la
$paramsección de estos cuatro parámetros, supongo que debería ser arregladoCallFromyBtype, comousides la clave de sesión , puede encontrarlo fácilmente en la respuesta anterior.PaxConfiges el recuento de invitados, está relacionado conroomConfigurationusted enviado en la primera solicitud.Para automatizar la segunda solicitud, primero generará el valor descodificado para cada parámetro y luego los codificará con
Base64.Actualizar:
fuente