J'ai créé un script pour obtenir les éléments html d'une page cible en envoyant deux requêtes https par la suite. Mon script peut parfaitement faire la chose. Cependant, j'ai dû copier les quatre valeurs des outils de développement Chrome pour remplir les quatre clés à l'intérieur payload
afin d'envoyer les dernières requêtes http pour atteindre la page cible. Ceci est le lien de départ et voici la description de la façon dont je pourrais atteindre la page cible.
- Cliquez sur le
Find Hotel
bouton (pas besoin de changer les dates si lachek-out
date est par défaut au moins un jour plus longue que lacheck-in
date). - Cochez la case comme l'image ci-dessous et appuyez sur le
Book Now
bouton juste au-dessus. Maintenant, cela devrait vous conduire automatiquement à la page cible. - En atteignant la page cible intitulée as
Enter Guest Details
, analysez les éléments html à partir de là
J'ai essayé avec (en travaillant un):
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)
Dans le script ci - dessus , je l' ai copié et collé la valeur CallFrom
, Btype
, PaxConfig
et usid
d'outils dev à utiliser dans payload
.
Comment puis-je remplir automatiquement les valeurs à utiliser dans la charge utile?
Btype
peut s'agir d'une valeur dynamique correspondant aux options choisies lors de la première étape.PaxConfig
pourrait également être dans un format différent si les passagers incluent des enfants.Réponses:
Les paramètres envoyés à la deuxième requête sont encodés en Base64 , après décodage, ils sont:
À première vue, vous remarquez déjà qu'ils sont dans des modèles de:
Où
$date
est l'heure actuelle au formatutc_ts_now.strftime("%I:%M:%S %p")
.Pour la
$param
section de ces quatre paramètres, je suppose que cela devrait être corrigéCallFrom
etBtype
,usid
c'est la clé de session , vous pouvez la trouver facilement dans la réponse précédente.PaxConfig
est le nombre d'invités, il est lié au fait queroomConfiguration
vous avez envoyé la première demande.Pour automatiser la deuxième demande, vous devez d'abord générer la valeur décodée pour chaque paramètre, puis les coder avec
Base64
.Mise à jour:
la source