পাইথনে সম্পূর্ণ জেনারিক সমাধানের জন্য এখানে আমার প্রচেষ্টা:
প্রথমত, একটি জেনেরিক "অপেক্ষা" ফাংশন (আপনি যদি পছন্দ করেন তবে ওয়েবড্রাইভারওয়াইট ব্যবহার করুন) আমি তাদের কুৎসিত মনে করি:
def wait_for(condition_function):
start_time = time.time()
while time.time() < start_time + 3:
if condition_function():
return True
else:
time.sleep(0.1)
raise Exception('Timeout waiting for {}'.format(condition_function.__name__))
এর পরে, সমাধানটি এই স্তরের উপর নির্ভর করে যে সেলেনিয়াম শীর্ষ স্তরের <html>
উপাদান সহ একটি পৃষ্ঠায় সমস্ত উপাদানগুলির জন্য একটি (অভ্যন্তরীণ) আইডি নম্বর রেকর্ড করে । যখন একটি পৃষ্ঠা সতেজ বা লোড হয়, এটি একটি নতুন আইডি সহ একটি নতুন এইচটিএমএল উপাদান পায়।
সুতরাং, ধরে নিয়ে আপনি উদাহরণস্বরূপ "আমার লিঙ্ক" পাঠ্যের একটি লিঙ্কে ক্লিক করতে চান:
old_page = browser.find_element_by_tag_name('html')
browser.find_element_by_link_text('my link').click()
def page_has_loaded():
new_page = browser.find_element_by_tag_name('html')
return new_page.id != old_page.id
wait_for(page_has_loaded)
আরও পাইথোনিক, পুনরায় ব্যবহারযোগ্য, জেনেরিক সহায়তার জন্য আপনি একটি প্রসঙ্গ পরিচালক প্রস্তুত করতে পারেন:
from contextlib import contextmanager
@contextmanager
def wait_for_page_load(browser):
old_page = browser.find_element_by_tag_name('html')
yield
def page_has_loaded():
new_page = browser.find_element_by_tag_name('html')
return new_page.id != old_page.id
wait_for(page_has_loaded)
এবং তারপরে আপনি এটিকে কোনও সেলেনিয়াম মিথস্ক্রিয়াতে ব্যবহার করতে পারেন:
with wait_for_page_load(browser):
browser.find_element_by_link_text('my link').click()
আমি হিসেব করি বুলেটপ্রুফ! আপনি কি মনে করেন?
এটি সম্পর্কে একটি ব্লগ পোস্টে আরও তথ্য