Criei um script para obter os elementos html de uma página de destino enviando duas solicitações https posteriormente. Meu script pode fazer a coisa na perfeição. No entanto, eu tive que copiar os quatro valores das ferramentas de desenvolvimento do chrome para preencher as quatro chaves dentro payload
para enviar as solicitações http finais para alcançar a página de destino. Este é o link inicial e a seguir, a descrição de como eu poderia alcançar a página de destino.
- Clique no
Find Hotel
botão (não é necessário alterar as datas se achek-out
data for padrão, pelo menos, um dia a mais que acheck-in
data). - Marque a caixa como na imagem abaixo e pressione o
Book Now
botão logo acima dela. Agora, ele deve levar você para a página de destino automaticamente. - Ao alcançar a página de destino intitulada como
Enter Guest Details
, analise os elementos html a partir daí
Eu tentei com (trabalhando um):
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)
No script acima Copiei e colei o valor de CallFrom
, Btype
, PaxConfig
e usid
de dev ferramentas para uso dentro payload
.
Como posso preencher os valores automaticamente para serem usados na carga útil?
python
python-3.x
web-scraping
MITHU
fonte
fonte
Btype
pode ser um valor dinâmico correspondente às opções escolhidas na primeira etapa.PaxConfig
também pode estar em um formato diferente se os passageiros incluírem crianças.Respostas:
Os parâmetros enviados para a segunda solicitação são codificados em Base64 , depois da decodificação são:
À primeira vista, você já percebe que eles estão em padrões de:
Onde
$date
é a hora atual no formato deutc_ts_now.strftime("%I:%M:%S %p")
.Para a
$param
seção desses quatro parâmetros, acho que deve ser corrigidoCallFrom
eBtype
,usid
é a chave da sessão , você pode encontrá-lo facilmente na resposta anterior.PaxConfig
é a contagem de convidados, está relacionado aroomConfiguration
você enviado na primeira solicitação.Para automatizar a segunda solicitação, você deve gerar o valor decodificado para cada parâmetro primeiro e depois codificá-los com
Base64
.Atualizar:
fonte