मेरी स्क्रिप्ट को पेलोड के भीतर उपयोग किए जाने के लिए स्वचालित रूप से कुछ मान उत्पन्न करने में असमर्थ


10

मैंने बाद में दो https अनुरोध भेजकर html तत्वों को लक्ष्य पृष्ठ से प्राप्त करने के लिए एक स्क्रिप्ट बनाई है। मेरी पटकथा बात को त्रुटिपूर्ण रूप से कर सकती है। हालांकि, मुझे payloadलक्ष्य पृष्ठ तक पहुंचने के लिए अंतिम http अनुरोध भेजने के लिए चार देवता से क्रोम देव उपकरण से चार मूल्यों को कॉपी करना था । यह शुरुआती लिंक है और निम्नलिखित विवरण है कि मैं लक्ष्य पृष्ठ तक कैसे पहुंच सकता हूं।

  1. Find Hotelबटन पर क्लिक करें (यदि chek-outदिनांक डिफ़ॉल्ट रूप से check-inदिनांक से कम से कम एक दिन अधिक है तो तिथियों को बदलने की आवश्यकता नहीं है )।
  2. नीचे दिए गए चित्र की तरह बॉक्स को टिक करें और उसके Book Nowठीक ऊपर बटन दबाएं । अब, यह आपको स्वचालित रूप से लक्ष्य पृष्ठ पर ले जाना चाहिए।
  3. शीर्षक वाले लक्ष्य पृष्ठ पर पहुंचने पर Enter Guest Details, html तत्वों को वहां से पार्स करें

यहां छवि विवरण दर्ज करें

मैंने साथ काम करने की कोशिश की है:

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)

ऊपर स्क्रिप्ट में मैं नकल की और का मूल्य चिपकाया है CallFrom, Btype, PaxConfigऔर usidके भीतर उपयोग के लिए देव से उपकरण payload

मैं पेलोड के भीतर उपयोग किए जाने वाले स्वचालित रूप से मूल्यों को कैसे भर सकता हूं?


क्या कामू का जवाब पर्याप्त नहीं है? मुझे लगता है कि मैं उनके निर्देशों का पालन करते हुए परिणाम प्राप्त कर सकता हूं।
तदम

हाय @ तदम, आपके हस्तक्षेप के लिए धन्यवाद। हाँ, कामू का उत्तर स्पष्ट करता है कि मैं कैसे परिणाम प्राप्त कर सकता हूं, लेकिन मुझे अत्यधिक संदेह है कि मैं इसे स्वयं को उपरोक्त स्क्रिप्ट के भीतर लागू कर सकता हूं और यही कारण है कि मैंने पूर्ण उत्तर प्राप्त करने के लिए इनाम निर्धारित किया है। धन्यवाद।
मीतू

ओह समझा। मुझे यकीन है कि @Kamoo अगर पूछा जाए तो कोड प्रदान करेगा।
तामदम

@ मैं ने अपने उत्तर को अपडेट किया, कृपया ध्यान दें कि Btypeपहले चरण से चुने गए विकल्पों के अनुरूप एक गतिशील मूल्य हो सकता है। PaxConfigयदि यात्री बच्चों को शामिल करते हैं तो यह एक अलग प्रारूप में भी हो सकता है।
कामू

जवाबों:


5

दूसरे अनुरोध पर भेजे गए परमेश्‍वर बेस 64 एनकोडेड हैं, डिकोड के बाद वे हैं:

    'CallFrom':'1:16:38 PM|B2C|1:16:38 PM',
    'Btype':'1:16:38 PM|A|1:16:38 PM',
    'PaxConfig':'1:16:38 PM|2|0|2|0||1:16:38 PM',
    'usid':'1:16:38 PM|henxvi3qegsrwqzewilkfp2m|1:16:38 PM'  

पहली नज़र में, आप पहले से ही वे के पैटर्न में हैं नोटिस:

$date|$param|$date

$dateके प्रारूप में वर्तमान समय कहां है utc_ts_now.strftime("%I:%M:%S %p")

के लिए $paramइन चार मापदंडों के अनुभाग, मुझे लगता है इसके लिए तय किया जाना चाहिए CallFromऔर Btype, usidहै सत्र कुंजी, आप इसे आसानी से पिछले जवाब में पा सकते हैं।

PaxConfigअतिथि की गिनती है, यह roomConfigurationआपके द्वारा पहले अनुरोध में भेजा गया है।

दूसरे अनुरोध को स्वचालित करने के लिए, आप पहले प्रत्येक पैरामीटर के लिए डीकोड किया गया मान जनरेट करेंगे, फिर उन्हें एनकोड करेंगे Base64

अपडेट करें:

#!/usr/bin/env python3.7
import base64
from datetime import datetime

import requests


def first_request(session, params):
    url = 'https://booking.discoverqatar.qa/SearchHandler.aspx'
    r = session.get(url, params=params)
    return r


def second_request(session, params):
    url = 'https://booking.discoverqatar.qa/PassengerDetails.aspx'
    r = session.get(url, params=params)
    return r


def main():
    params1 = {
        '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':                ''
    }
    session = requests.Session()
    _ = first_request(session, params1)
    asp_session = session.cookies.get("ASP.NET_SessionId")

    params2 = {
        # Could related to options "Available" / "On Request"
        "Btype":     "A",

        # Try out other guest counts to make sure
        "PaxConfig": params1["roomConfiguration"] * 2,

        "CallFrom": "B2C",
        "usid":     asp_session
    }
    date = datetime.utcnow().strftime("%I:%M:%S %p")
    for k, v in params2.items():
        v = "|".join([date, v, date])
        v = base64.b64encode(bytes(v, "utf-8")).decode("utf-8")
        params2[k] = v
    r = second_request(session, params2)
    print(r.text)


if __name__ == '__main__':
    main()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.