Ich habe ein Skript erstellt, um die HTML-Elemente von einer Zielseite abzurufen, indem anschließend zwei https-Anforderungen gesendet werden. Mein Skript kann das Ding einwandfrei machen. Ich musste jedoch die vier Werte aus den Chrome-Entwicklungstools kopieren, um die vier darin enthaltenen Schlüssel auszufüllen und payload
die endgültigen http-Anforderungen zu senden, um die Zielseite zu erreichen. Dies ist der Startlink und im Folgenden wird beschrieben, wie ich die Zielseite erreichen kann.
- Klicken Sie auf die
Find Hotel
Schaltfläche (chek-out
Datum muss nicht geändert werden, wenn das Datum standardmäßig mindestens einen Tag länger als dascheck-in
Datum ist). - Aktivieren Sie das Kontrollkästchen wie im Bild unten und drücken Sie die
Book Now
Taste direkt darüber. Jetzt sollte es Sie automatisch zur Zielseite führen. - Wenn Sie die Zielseite mit dem Titel als erreicht haben
Enter Guest Details
, analysieren Sie die HTML-Elemente von dort aus
Ich habe versucht mit (Arbeit):
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)
In dem obigen Skript habe ich kopiert und den Wert eingefügt CallFrom
, Btype
, PaxConfig
und usid
von Entwickler - Tool zur Verwendung innerhalb payload
.
Wie kann ich die Werte automatisch eingeben, die innerhalb der Nutzlast verwendet werden sollen?
quelle
Btype
möglicherweise ein dynamischer Wert ist, der den im ersten Schritt ausgewählten Optionen entspricht.PaxConfig
kann auch in einem anderen Format vorliegen, wenn Passagiere Kinder enthalten.Antworten:
Parameter, die an die zweite Anforderung gesendet werden, sind Base64- codiert. Nach dem Decodieren sind dies:
Auf den ersten Blick merkt man schon, dass sie folgende Muster haben:
Wo
$date
ist die aktuelle Zeit im Format vonutc_ts_now.strftime("%I:%M:%S %p")
.Für
$param
Abschnitt dieser vier Parameter, ich denke , es festgelegt werden sollCallFrom
undBtype
,usid
ist der Sitzungsschlüssel, können Sie es leicht in der vorherige Antwort finden.PaxConfig
Ist die Anzahl der Gäste, hängt es mitroomConfiguration
Ihnen zusammen, die Sie in der ersten Anfrage gesendet haben.Um die zweite Anforderung zu automatisieren, generieren Sie zuerst den decodierten Wert für jeden Parameter und codieren ihn dann mit
Base64
.Aktualisieren:
quelle