আমার স্ক্রিপ্টটি পে-লোডের মধ্যে স্বয়ংক্রিয়ভাবে কয়েকটি মান উত্পন্ন করতে দিতে অক্ষম


10

পরবর্তী সময়ে দুটি https অনুরোধ প্রেরণ করে আমি একটি লক্ষ্য পৃষ্ঠা থেকে এইচটিএমএল উপাদানগুলি পেতে একটি স্ক্রিপ্ট তৈরি করেছি। আমার স্ক্রিপ্টটি নির্বিঘ্নে জিনিসটি করতে পারে। যাইহোক, payloadলক্ষ্য পৃষ্ঠায় পৌঁছানোর জন্য চূড়ান্ত HTTP অনুরোধগুলি প্রেরণের জন্য আমাকে চারটি কী পূরণ করতে ক্রোম দেব সরঞ্জামগুলি থেকে চারটি মান কপি করতে হয়েছিল । এটি সূচনা লিঙ্ক এবং নীচে আমি কীভাবে লক্ষ্য পৃষ্ঠায় পৌঁছে যেতে পারি তার বর্ণনা নীচে দেওয়া হল।

  1. বাটনে ক্লিক করুন Find Hotel(তারিখের chek-outচেয়ে কমপক্ষে এক দিন লম্বা হলে পূর্বনির্ধারিত তারিখ পরিবর্তন করার দরকার নেই check-in)।
  2. নীচের চিত্রের মতো বাক্সটি টিক দিন এবং তার Book Nowঠিক উপরে বোতাম টিপুন । এখন, এটি স্বয়ংক্রিয়ভাবে আপনাকে লক্ষ্য পৃষ্ঠায় নিয়ে যেতে হবে।
  3. হিসাবে শিরোনামযুক্ত লক্ষ্য পৃষ্ঠায় পৌঁছে Enter Guest Details, সেখান থেকে এইচটিএমএল উপাদানগুলি পার্স করুন

এখানে চিত্র বর্ণনা লিখুন

আমি চেষ্টা করেছি (এক কাজ করে):

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

পে-লোডের মধ্যে স্বয়ংক্রিয়ভাবে ব্যবহৃত মানগুলি কীভাবে পূরণ করতে পারি?


কামুর উত্তর কি যথেষ্ট নয়? আমি মনে করি তাদের নির্দেশাবলী অনুসরণ করে আমি ফলাফল পেতে পারি।
tmadam

হাই @ ট্যামডাম, আপনার হস্তক্ষেপের জন্য ধন্যবাদ হ্যাঁ, কমুর জবাবটি কীভাবে ফলাফল পেতে পারে সে সম্পর্কে স্পষ্ট করে তবে আমি উপরোক্ত স্ক্রিপ্টের মধ্যে এটিকে নিজেই প্রয়োগ করতে পারি এবং আমি অত্যন্ত সন্দেহ প্রকাশ করেছি এবং এ কারণেই আমি একটি পূর্ণাঙ্গ উত্তর পাওয়ার জন্য অনুগ্রহ স্থাপন করেছি। ধন্যবাদ।
মিঠু

আহ আমি দেখি. আমি নিশ্চিত @ কমু যদি জিজ্ঞাসা করা হয় তবে কোড সরবরাহ করবে I'm
tmadam

@ মিঠু আমি আমার উত্তর আপডেট করেছি, দয়া করে নোট করুন যে 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()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.