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 payload
para 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 Hotel
botón (no es necesario cambiar las fechas si lachek-out
fecha es por lo menos un día más larga que lacheck-in
fecha). - Marque la casilla como la imagen de abajo y presione el
Book Now
botó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
, PaxConfig
y usid
desde dev herramientas para su uso dentro payload
.
¿Cómo puedo completar los valores automáticamente para usarlos dentro de la carga útil?
fuente
Btype
podría ser un valor dinámico correspondiente a las opciones elegidas en el primer paso.PaxConfig
tambié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
$date
está la hora actual en el formato deutc_ts_now.strftime("%I:%M:%S %p")
.Para la
$param
sección de estos cuatro parámetros, supongo que debería ser arregladoCallFrom
yBtype
, comousid
es la clave de sesión , puede encontrarlo fácilmente en la respuesta anterior.PaxConfig
es el recuento de invitados, está relacionado conroomConfiguration
usted 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