এটি হওয়ার কারণ হল যে সেলেনিয়াম ওয়েব ড্রাইভারকে অবশ্যই ওয়েবপৃষ্ঠাটি ডাউনলোড করতে হবে এবং পৃষ্ঠাটিতে কিছু করার আগে পৃষ্ঠাটি রেন্ডার করা শেষ করতে হবে। অতীতে, ওয়েব সার্ভার একটি ওয়েবসাইটের সামগ্রী তৈরি করেছিল এবং ব্রাউজারটি কেবল এটি ডাউনলোড করে এবং এটি রেন্ডার করেছে। আজকাল আমাদের অনেকগুলি একক পৃষ্ঠার ওয়েব অ্যাপ্লিকেশন রয়েছে যা কিছুটা ভিন্নভাবে কাজ করে। সিঙ্গেল পেজ ওয়েব অ্যাপস (এসপিএ) -এ, ওয়েব সার্ভার শুধুমাত্র ফ্রন্টএন্ড কোডগুলি পরিবেশন করে। একবার ব্রাউজারে ফ্রন্টএন্ড কোড রেন্ডার হয়ে গেলে, ফ্রন্টএন্ড কোড ওয়েব সার্ভারে API ডেটার অনুরোধ করার জন্য AJAX ব্যবহার করে। ফ্রন্টএন্ড একবার API ডেটা গ্রহণ করলে, এটি তাদের ব্রাউজারে রেন্ডার করে। সুতরাং, যদিও ব্রাউজারটি ওয়েব পৃষ্ঠাটি ডাউনলোড এবং রেন্ডার করা শেষ করেছে, ওয়েবপৃষ্ঠাটি এখনও প্রস্তুত নয়। আপনাকে অবশ্যই API ডেটা পাওয়ার জন্য অপেক্ষা করতে হবে এবং সেগুলিও রেন্ডার করতে হবে। সুতরাং, এই সমস্যার সমাধান হল সেলেনিয়ামের সাথে কিছু করার আগে ডেটা উপলব্ধ হওয়ার জন্য অপেক্ষা করা।
সেলেনিয়ামে, 2 ধরণের অপেক্ষা রয়েছে:
1) অন্তর্নিহিত অপেক্ষা
2) স্পষ্ট প্রতীক্ষা
1) অন্তর্নিহিত অপেক্ষা: এটি বাস্তবায়ন করা সবচেয়ে সহজ। একটি অন্তর্নিহিত অপেক্ষা সেলেনিয়াম ওয়েব ড্রাইভারকে DOM (ডকুমেন্ট অবজেক্ট মডেল) প্রস্তুত হওয়ার জন্য কয়েক সেকেন্ড অপেক্ষা করতে বলে (ওয়েব পেজ প্রস্তুত হওয়ার জন্য)।
2) স্পষ্ট প্রতীক্ষা: এটি অন্তর্নিহিত অপেক্ষা অপেক্ষা একটু জটিল। স্পষ্ট প্রতীক্ষায়, আপনি সেলেনিয়াম ওয়েব ড্রাইভারকে বলবেন কিসের জন্য অপেক্ষা করতে হবে। সেলেনিয়াম সেই নির্দিষ্ট শর্ত পূরণের জন্য অপেক্ষা করে। একবার এটি পূর্ণ হলে, সেলেনিয়াম ওয়েব ড্রাইভার অন্যান্য কমান্ড নিতে প্রস্তুত হবে। সাধারণত, স্পষ্ট প্রতীক্ষার সময় পরিবর্তনশীল। এটি নির্ভর করে কত দ্রুত শর্তগুলি সন্তুষ্ট হয়। সবচেয়ে খারাপ পরিস্থিতিতে, স্পষ্ট অপেক্ষা যতক্ষণ অন্তর্নিহিত অপেক্ষা করবে ততক্ষণ অপেক্ষা করবে।
এই নিবন্ধে, আমি আপনাকে সেলেনিয়ামের সাথে একটি পৃষ্ঠা লোড করার জন্য কীভাবে (অন্তর্নিহিত এবং স্পষ্ট) অপেক্ষা করতে হবে তা দেখাতে যাচ্ছি। চল শুরু করা যাক.
পূর্বশর্ত:
এই নিবন্ধের আদেশ এবং উদাহরণগুলি চেষ্টা করার জন্য, আপনার অবশ্যই থাকতে হবে,
1) আপনার কম্পিউটারে একটি লিনাক্স বিতরণ (বিশেষত উবুন্টু) ইনস্টল করা আছে।
2) আপনার কম্পিউটারে পাইথন 3 ইনস্টল করা আছে।
3) আপনার কম্পিউটারে PIP 3 ইনস্টল করা আছে।
4) পাইথন virtualenv আপনার কম্পিউটারে ইনস্টল করা প্যাকেজ।
5) আপনার কম্পিউটারে মোজিলা ফায়ারফক্স বা গুগল ক্রোম ওয়েব ব্রাউজার ইনস্টল করা আছে।
6) ফায়ারফক্স গেকো ড্রাইভার বা ক্রোম ওয়েব ড্রাইভার কিভাবে ইনস্টল করতে হবে তা জানতে হবে।
প্রয়োজনীয়তা 4, 5 এবং 6 পূরণ করার জন্য, আমার নিবন্ধটি পড়ুন পাইথন 3 দিয়ে সেলেনিয়ামের পরিচিতি Linuxhint.com এ।
আপনি অন্যান্য বিষয়ে অনেক নিবন্ধ খুঁজে পেতে পারেন LinuxHint.com । আপনার কোন সহায়তার প্রয়োজন হলে সেগুলি পরীক্ষা করে দেখুন।
একটি প্রকল্প ডিরেক্টরি স্থাপন:
সবকিছু সংগঠিত রাখতে, একটি নতুন প্রকল্প ডিরেক্টরি তৈরি করুন সেলেনিয়াম-অপেক্ষা/ নিম্নরূপ:
$mkdir -পিভিসেলেনিয়াম-অপেক্ষা/ড্রাইভারএ নেভিগেট করুন সেলেনিয়াম-অপেক্ষা/ প্রকল্প নির্দেশিকা নিম্নরূপ:
$সিডিসেলেনিয়াম-অপেক্ষা/প্রকল্প ডিরেক্টরিতে একটি পাইথন ভার্চুয়াল পরিবেশ তৈরি করুন নিম্নরূপ:
$virtualenv .venv
নিম্নরূপ ভার্চুয়াল পরিবেশ সক্রিয় করুন:
$সূত্র.venv/আমি/সক্রিয় করুননিম্নরূপ PIP3 ব্যবহার করে সেলেনিয়াম ইনস্টল করুন:
$ pip3 সেলেনিয়াম ইনস্টল করুনসমস্ত প্রয়োজনীয় ওয়েব ড্রাইভার ডাউনলোড করুন এবং ইনস্টল করুন ড্রাইভার/ প্রকল্পের ডিরেক্টরি। আমি আমার নিবন্ধে ওয়েব ড্রাইভার ডাউনলোড এবং ইনস্টল করার প্রক্রিয়া ব্যাখ্যা করেছি পাইথন 3 দিয়ে সেলেনিয়ামের পরিচিতি । যদি আপনার কোন সাহায্যের প্রয়োজন হয়, অনুসন্ধান করুন LinuxHint.com সেই নিবন্ধের জন্য।
আমি এই নিবন্ধে প্রদর্শনের জন্য গুগল ক্রোম ওয়েব ব্রাউজার ব্যবহার করব। সুতরাং, আমি ব্যবহার করব ক্রোমড্রাইভার থেকে বাইনারি ড্রাইভার/ ডিরেক্টরি।
অন্তর্নিহিত অপেক্ষা নিয়ে পরীক্ষা করার জন্য, একটি নতুন পাইথন স্ক্রিপ্ট তৈরি করুন ex01.py আপনার প্রজেক্ট ডিরেক্টরিতে এবং সেই ফাইলে কোডের নিম্নলিখিত লাইনগুলি টাইপ করুন।
থেকেসেলেনিয়ামআমদানিওয়েবড্রাইভারথেকেসেলেনিয়ামওয়েবড্রাইভার।সাধারণ।চাবি আমদানিচাবি
বিকল্প=ওয়েবড্রাইভার।ChromeOptions()
বিকল্পমাথাহীন = সত্য
ব্রাউজার=ওয়েবড্রাইভার।ক্রোম(এক্সিকিউটেবল_পথ='./drivers/chromedriver',বিকল্প=বিকল্প)
ব্রাউজার।নিখুঁতভাবে অপেক্ষা করুন(10)
ব্রাউজার।পাওয়া('https://www.unixtimestamp.com/')
টাইমস্ট্যাম্প=ব্রাউজার।find_element_by_xpath('// h3 [@] [1]')
ছাপা('বর্তমান টাইমস্ট্যাম্প: %s'%(টাইমস্ট্যাম্পপাঠ্য।বিভক্ত('')[0]))
ব্রাউজার।বন্ধ()
একবার হয়ে গেলে, সংরক্ষণ করুন ex01.py পাইথন স্ক্রিপ্ট।
লাইন 1 এবং 2 সমস্ত প্রয়োজনীয় সেলেনিয়াম উপাদান আমদানি করে।
লাইন 4 একটি ক্রোম অপশন বস্তু তৈরি করে।
লাইন 5 ক্রোম ওয়েব ড্রাইভারের জন্য হেডলেস মোড সক্ষম করে।
লাইন 7 ব্যবহার করে একটি ক্রোম ব্রাউজার বস্তু তৈরি করে ক্রোমড্রাইভার থেকে বাইনারি ড্রাইভার/ ডিরেক্টরি।
লাইন 8 ব্যবহার করে সেলেনিয়ামকে 10 সেকেন্ডের জন্য নিখুঁতভাবে অপেক্ষা করতে বলা হয় নিখুঁতভাবে অপেক্ষা () ব্রাউজার পদ্ধতি।
লাইন 10 ব্রাউজারে www.unixtimestamp.com লোড করে।
লাইন 12 XPath নির্বাচক ব্যবহার করে টাইমস্ট্যাম্প উপাদান খুঁজে পায় // h3 [@class = 'text-danger'] [1] এবং এটি সংরক্ষণ করে টাইমস্ট্যাম্প পরিবর্তনশীল
আমি Chrome ডেভেলপার টুল থেকে XPath নির্বাচক পেয়েছি। আপনি দেখতে পাচ্ছেন, টাইমস্ট্যাম্পটি প্রথমটিতে রয়েছে h3 ক্লাসের নামের উপাদান পাঠ্য-বিপদ । আছে 2 টি h3 ক্লাসের সাথে উপাদান পাঠ্য-বিপদ ।
লাইন 13 শুধুমাত্র XPath নির্বাচক ব্যবহার করে নির্বাচিত উপাদান থেকে টাইমস্ট্যাম্প প্রিন্ট করে টাইমস্ট্যাম্প পরিবর্তনশীল
লাইন 14 ব্রাউজার বন্ধ করে দেয়।
একবার হয়ে গেলে, পাইথন স্ক্রিপ্টটি চালান ex01.py নিম্নরূপ:
$ python3 ex01।pyআপনি দেখতে পাচ্ছেন, বর্তমান টাইমস্ট্যাম্পটি unixtimestamp.com থেকে বের করা হয়েছে এবং কনসোলে মুদ্রিত হয়েছে।
স্পষ্ট প্রতীক্ষার সাথে কাজ করা:
স্পষ্ট প্রতীক্ষার সাথে পরীক্ষা করতে, একটি নতুন পাইথন স্ক্রিপ্ট তৈরি করুন ex02.py আপনার প্রজেক্ট ডিরেক্টরিতে এবং সেই ফাইলে কোডের নিম্নলিখিত লাইনগুলি টাইপ করুন।
থেকেসেলেনিয়ামআমদানিওয়েবড্রাইভারথেকেসেলেনিয়ামওয়েবড্রাইভার।সাধারণ।চাবি আমদানিচাবি
থেকেসেলেনিয়ামওয়েবড্রাইভার।সাধারণ।দ্বারা আমদানিদ্বারা
থেকেসেলেনিয়ামওয়েবড্রাইভার।সমর্থন।পেঁয়াজ আমদানিওয়েবড্রাইভারওয়েট
থেকেসেলেনিয়ামওয়েবড্রাইভার।সমর্থন আমদানিপ্রত্যাশিত_ শর্ত
বিকল্প=ওয়েবড্রাইভার।ChromeOptions()
বিকল্পমাথাহীন = সত্য
ব্রাউজার=ওয়েবড্রাইভার।ক্রোম(এক্সিকিউটেবল_পথ='./drivers/chromedriver',বিকল্প=বিকল্প)
ব্রাউজার।পাওয়া('https://www.unixtimestamp.com/')
চেষ্টা করুন:
টাইমস্ট্যাম্প=ওয়েবড্রাইভারওয়েট(ব্রাউজার, 10)।পর্যন্ত(
প্রত্যাশিত_ শর্ত।উপস্থিতি_এলিমেন্ট_ অবস্থান((দ্বারা.এক্সপ্যাথ, '
// h3 [@] [1] '))
)
ছাপা('বর্তমান টাইমস্ট্যাম্প: %s'%(টাইমস্ট্যাম্পপাঠ্য।বিভক্ত('')[0]))
অবশেষে:
ব্রাউজার।বন্ধ()
একবার হয়ে গেলে, সংরক্ষণ করুন ex02.py পাইথন স্ক্রিপ্ট।
লাইন 1-5 সেলেনিয়াম লাইব্রেরি থেকে সমস্ত প্রয়োজনীয় উপাদান আমদানি করে।
লাইন 7 একটি ক্রোম অপশন বস্তু তৈরি করে।
লাইন 8 ক্রোম ওয়েব ড্রাইভারের জন্য হেডলেস মোড সক্ষম করে।
লাইন 10 ব্যবহার করে একটি ক্রোম ব্রাউজার অবজেক্ট তৈরি করে ক্রোমড্রাইভার থেকে বাইনারি ড্রাইভার/ ডিরেক্টরি।
লাইন 12 ব্রাউজারে www.unixtimestamp.com লোড করে।
স্পষ্ট প্রতীক্ষাটি অবশেষে ট্রাই-ব্লকে প্রয়োগ করা হয়েছে (লাইন 14-20 থেকে)
লাইন 15-17 ব্যবহার করে তৈরি করে WebDriverWait () বস্তু এর প্রথম যুক্তি WebDriverWait () ব্রাউজার বস্তু, এবং দ্বিতীয় যুক্তি হল শর্ত পূরণের জন্য সর্বাধিক অনুমোদিত সময় (সবচেয়ে খারাপ পরিস্থিতি), যা এই ক্ষেত্রে 10 সেকেন্ড।
মধ্যে পর্যন্ত () ব্লক, প্রত্যাশিত_ শর্তাবলী। উপাদানটি নির্বাচন করার চেষ্টা করার আগে উপাদানটি উপস্থিত আছে কিনা তা নিশ্চিত করার জন্য পদ্ধতি ব্যবহার করা হয়। এখানে, XPATH দ্বারা বলতে ব্যবহৃত হয় উপস্থিতি_এলিমেন্ট_স্থাপিত () উপাদানটি নির্বাচন করার জন্য আমরা একটি XPath নির্বাচক ব্যবহার করেছি। XPath নির্বাচক হল // h3 [@class = 'text-danger'] [1] ।
একবার উপাদানটি পাওয়া গেলে, এটি টাইমস্ট্যাম্প পরিবর্তনশীল
লাইন 18 নির্বাচিত উপাদান থেকে শুধুমাত্র টাইমস্ট্যাম্প প্রিন্ট করে।
অবশেষে, 19-20 লাইন ব্রাউজার বন্ধ করে দেয়।
একবার হয়ে গেলে, চালান ex02.py পাইথন স্ক্রিপ্ট নিম্নরূপ:
$ python3 ex02।pyআপনি দেখতে পাচ্ছেন, unixtimestamp.com থেকে বর্তমান টাইমস্ট্যাম্পটি কনসোলে মুদ্রিত হয়েছে।
স্পষ্ট প্রতীক্ষায় উপাদান নির্বাচন করা:
আগের বিভাগে, আমি ব্যবহার করেছি XPATH দ্বারা XPath নির্বাচক ব্যবহার করে উপাদান নির্বাচন করার জন্য। আপনি আইডি, ট্যাগের নাম, সিএসএস ক্লাসের নাম, সিএসএস নির্বাচক ইত্যাদি ব্যবহার করে উপাদানগুলি নির্বাচন করতে পারেন।
সমর্থিত নির্বাচন পদ্ধতি নিচে দেওয়া হল:
XPATH দ্বারা - XPath নির্বাচক ব্যবহার করে উপাদান/উপাদান নির্বাচন করে।
CLASS_NAME দ্বারা - সিএসএস ক্লাসের নাম ব্যবহার করে উপাদান/উপাদান নির্বাচন করে।
দ্বারা - সিএসএস নির্বাচক ব্যবহার করে উপাদান/উপাদান নির্বাচন করে।
আইডি দ্বারা - আইডি দ্বারা উপাদান নির্বাচন করে
নামে - নাম দ্বারা উপাদান/উপাদান নির্বাচন করে।
দ্বারা। TAG_NAME - HTML ট্যাগ নাম দ্বারা উপাদান/উপাদান নির্বাচন করে।
দ্বারা। LINK_TEXT - এর লিঙ্ক পাঠ্য দ্বারা উপাদান/উপাদান নির্বাচন করে প্রতি (নোঙ্গর) এইচটিএমএল ট্যাগ।
দ্বারা। PARTIAL_LINK_TEXT - এর আংশিক লিঙ্ক পাঠ্য দ্বারা উপাদান/উপাদান নির্বাচন করে প্রতি (নোঙ্গর) এইচটিএমএল ট্যাগ।
এগুলি সম্পর্কে আরও তথ্যের জন্য, এখানে যান পাইথন সেলেনিয়াম এপিআই ডকুমেন্টেশন পৃষ্ঠা ।
স্পষ্ট প্রতীক্ষায় প্রত্যাশিত শর্তাবলী:
আগের স্পষ্ট প্রতীক্ষার উদাহরণে, আমি ব্যবহার করেছি উপস্থিতি_এলিমেন্ট_স্থাপিত () পদ্ধতি প্রত্যাশিত_ শর্ত আমি যে উপাদানটি খুঁজছিলাম তা নির্বাচন করার আগে বিদ্যমান কিনা তা নিশ্চিত করার জন্য স্পষ্ট অপেক্ষা শর্ত হিসাবে।
অন্য সব প্রত্যাশিত_ শর্ত আপনি একটি স্পষ্ট অপেক্ষা শর্ত হিসাবে ব্যবহার করতে পারেন। তাদের মধ্যে কিছু হল:
title_is (শিরোনাম) - পৃষ্ঠার শিরোনাম আছে কিনা তা পরীক্ষা করে শিরোনাম ।
title_contains (আংশিক_শিরোনাম) - পৃষ্ঠার শিরোনামে শিরোনামের একটি অংশ আছে কিনা তা পরীক্ষা করে আংশিক_শিরোনাম ।
visibility_of (উপাদান) - চেক করে কিনা উপাদান পৃষ্ঠায় দৃশ্যমান যে উপাদানটির প্রস্থ এবং উচ্চতা 0 এর চেয়ে বেশি।
visibility_of_element_located (লোকেটার) -
present_of_element_located (লোকেটার) - নিশ্চিত করুন যে উপাদানটি অবস্থিত (দ্বারা লোকেটার ) পৃষ্ঠায় উপস্থিত। দ্য লোকেটার একটি tuple হয় (দ্বারা, নির্বাচক), যেমন আমি স্পষ্ট প্রতীক্ষার উদাহরণে দেখিয়েছি।
উপস্থিতি_একটি_ উপাদান_স্থাপিত () - নিশ্চিত করে যে সমস্ত উপাদান মিলেছে লোকেটার পৃষ্ঠায় উপস্থিত। দ্য লোকেটার ইহা একটি (দ্বারা, নির্বাচক) tuple
text_to_be_present_in_element (লোকেটার, টেক্সট) - চেক করে কিনা পাঠ্য দ্বারা অবস্থিত উপাদান উপস্থিত লোকেটার । দ্য লোকেটার ইহা একটি (দ্বারা, নির্বাচক) tuple
element_to_be_clickable (লোকেটার) - দ্বারা চিহ্নিত উপাদানটি পরীক্ষা করে লোকেটার দৃশ্যমান এবং ক্লিকযোগ্য। দ্য লোকেটার ইহা একটি (দ্বারা, নির্বাচক) tuple
element_to_be_selected (locator) - দ্বারা চিহ্নিত উপাদানটি পরীক্ষা করে লোকেটার নির্বাচিত. দ্য লোকেটার ইহা একটি (দ্বারা, নির্বাচক) tuple
সতর্কতা_প্রস্তুত () - পৃষ্ঠায় একটি সতর্কতা সংলাপ উপস্থিত থাকার আশা করুন।
আরো অনেক আছে প্রত্যাশিত_ শর্ত আপনার ব্যবহারের জন্য উপলব্ধ। এগুলি সম্পর্কে আরও তথ্যের জন্য, এখানে যান পাইথন সেলেনিয়াম এপিআই ডকুমেন্টেশন পৃষ্ঠা ।
উপসংহার:
এই নিবন্ধে, আমি সেলেনিয়ামের অন্তর্নিহিত এবং স্পষ্ট প্রতীক্ষা নিয়ে আলোচনা করেছি। আমি আপনাকে দেখিয়েছি কিভাবে একটি অন্তর্নিহিত এবং স্পষ্ট প্রতীক্ষার সাথে কাজ করতে হয়। আপনার সর্বদা আপনার সেলেনিয়াম প্রকল্পগুলিতে স্পষ্ট প্রতীক্ষা ব্যবহার করার চেষ্টা করা উচিত কারণ সেলেনিয়াম যতটা সম্ভব অপেক্ষার সময় কমাতে চেষ্টা করবে। এইভাবে, প্রতিবার আপনি আপনার সেলেনিয়াম প্রকল্পগুলি চালানোর সময় আপনাকে নির্দিষ্ট সংখ্যক সেকেন্ডের জন্য অপেক্ষা করতে হবে না। স্পষ্ট অপেক্ষা অনেক সেকেন্ড সংরক্ষণ করা উচিত।
সেলেনিয়াম অপেক্ষা সম্পর্কে আরও তথ্যের জন্য, পরিদর্শন করুন অফিসিয়াল সেলেনিয়াম পাইথন লাইব্রেরি ডকুমেন্টেশন পৃষ্ঠার জন্য অপেক্ষা করছে ।