सेलेनियम के साथ पेज लोड होने की प्रतीक्षा कैसे करें

How Wait Page Load With Selenium



सेलेनियम वेब ड्राइवर के साथ वेब ऑटोमेशन या वेब स्क्रैपिंग के दौरान, आपको समस्या का सामना करना पड़ सकता है जैसे कि आप जिस तत्व का चयन करना चाहते हैं वह उपलब्ध नहीं है या आप जिस बटन को दबाना चाहते हैं वह क्लिक करने के लिए तैयार नहीं है और इसी तरह।

ऐसा होने का कारण यह है कि सेलेनियम वेब ड्राइवर को वेबपेज डाउनलोड करना होगा और इससे पहले कि आप उस पर कुछ भी कर सकें, पेज को रेंडर करना समाप्त कर दें। अतीत में, वेबसर्वर ने एक वेबसाइट की सामग्री तैयार की, और ब्राउज़र ने इसे डाउनलोड किया और इसे प्रस्तुत किया। इन दिनों हमारे पास कई सिंगल-पेज वेब ऐप्स हैं जो थोड़ा अलग तरीके से काम करते हैं। सिंगल पेज वेब एप्स (एसपीए) में, वेबसर्वर केवल फ्रंटएंड कोड पेश करता है। एक बार जब फ़्रंटएंड कोड ब्राउज़र पर रेंडर हो जाता है, तो फ़्रंटएंड कोड वेबसर्वर से API डेटा का अनुरोध करने के लिए AJAX का उपयोग करता है। एक बार जब फ्रंटएंड एपीआई डेटा प्राप्त करता है, तो यह उन्हें ब्राउज़र पर प्रस्तुत करता है। इसलिए, भले ही ब्राउज़र ने वेब पेज को डाउनलोड और रेंडर करना समाप्त कर दिया हो, फिर भी वेबपेज तैयार नहीं है। एपीआई डेटा प्राप्त करने और उन्हें भी प्रस्तुत करने के लिए आपको इसकी प्रतीक्षा करनी चाहिए। इसलिए, इस समस्या का समाधान यह है कि हम सेलेनियम के साथ कुछ भी करने से पहले डेटा के उपलब्ध होने की प्रतीक्षा करें।







सेलेनियम में, 2 प्रकार की प्रतीक्षाएँ होती हैं:
1) निहित प्रतीक्षा
2) स्पष्ट प्रतीक्षा



1) निहित प्रतीक्षा: इसे लागू करना सबसे आसान है। एक निहित प्रतीक्षा सेलेनियम वेब ड्राइवर को डीओएम (दस्तावेज़ ऑब्जेक्ट मॉडल) तैयार होने के लिए कई सेकंड प्रतीक्षा करने के लिए कहती है (वेब ​​पेज तैयार होने के लिए)।



2) स्पष्ट प्रतीक्षा: यह निहित प्रतीक्षा से थोड़ा जटिल है। स्पष्ट प्रतीक्षा में, आप सेलेनियम वेब ड्राइवर को बताते हैं कि किसका इंतजार करना है। सेलेनियम उस विशिष्ट शर्त के पूरा होने की प्रतीक्षा करता है। एक बार यह पूरा हो जाने के बाद, सेलेनियम वेब ड्राइवर अन्य कमांड लेने के लिए तैयार हो जाएगा। आमतौर पर, स्पष्ट प्रतीक्षा समय परिवर्तनशील होता है। यह इस बात पर निर्भर करता है कि शर्तें कितनी जल्दी संतुष्ट होती हैं। सबसे खराब स्थिति में, स्पष्ट प्रतीक्षा तब तक प्रतीक्षा करेगी जब तक निहित प्रतीक्षा।





इस लेख में, मैं आपको दिखाऊंगा कि सेलेनियम के साथ लोड होने वाले पृष्ठ के लिए प्रतीक्षा (अंतर्निहित और स्पष्ट) कैसे करें। तो चलो शुरू हो जाओ।

पूर्वापेक्षाएँ:

इस आलेख के आदेशों और उदाहरणों को आज़माने के लिए, आपके पास होना चाहिए,



1) आपके कंप्यूटर पर एक लिनक्स वितरण (अधिमानतः उबंटू) स्थापित है।
2) आपके कंप्यूटर पर Python 3 स्थापित है।
3) आपके कंप्यूटर पर PIP 3 स्थापित है।
4)पायथन वर्चुअलएन्व पैकेज आपके कंप्यूटर पर स्थापित है।
5) मोज़िला फ़ायरफ़ॉक्स या Google क्रोम वेब ब्राउज़र आपके कंप्यूटर पर स्थापित हैं।
6) पता होना चाहिए कि फ़ायरफ़ॉक्स गेको ड्राइवर या क्रोम वेब ड्राइवर कैसे स्थापित करें।

आवश्यकताओं ४, ५, और ६ को पूरा करने के लिए मेरा लेख पढ़ें पायथन 3 के साथ सेलेनियम का परिचय Linuxhint.com पर।

आप अन्य विषयों पर कई लेख पा सकते हैं LinuxHint.com . यदि आपको किसी सहायता की आवश्यकता हो तो उनकी जाँच अवश्य करें।

एक परियोजना निर्देशिका की स्थापना:

सब कुछ व्यवस्थित रखने के लिए, एक नई परियोजना निर्देशिका बनाएं सेलेनियम-रुको/ निम्नलिखित नुसार:

$एमकेडीआईआर -पीवीसेलेनियम-रुको/ड्राइवरों

पर नेविगेट करें सेलेनियम-रुको/ परियोजना निर्देशिका इस प्रकार है:

$सीडीसेलेनियम-रुको/

प्रोजेक्ट डायरेक्टरी में एक पायथन वर्चुअल वातावरण इस प्रकार बनाएँ:

$वर्चुअलएन्व .venv

वर्चुअल वातावरण को निम्नानुसार सक्रिय करें:

$स्रोत.venv/पूर्वाह्न/सक्रिय

PIP3 का उपयोग करके सेलेनियम को निम्नानुसार स्थापित करें:

$ pip3 सेलेनियम स्थापित करें

में सभी आवश्यक वेब ड्राइवर डाउनलोड और इंस्टॉल करें ड्राइवर/ परियोजना की निर्देशिका। मैंने अपने लेख में वेब ड्राइवरों को डाउनलोड करने और स्थापित करने की प्रक्रिया के बारे में बताया है पायथन 3 के साथ सेलेनियम का परिचय . अगर आपको किसी सहायता की आवश्यकता है, तो खोजें LinuxHint.com उस लेख के लिए।

मैं इस लेख में प्रदर्शन के लिए Google Chrome वेब ब्राउज़र का उपयोग करूंगा। तो, मैं का उपयोग करूँगा क्रोमड्राइवर से द्विआधारी ड्राइवर/ निर्देशिका।

निहित प्रतीक्षा के साथ प्रयोग करने के लिए, एक नई पायथन लिपि बनाएं ex01.py अपनी परियोजना निर्देशिका में और उस फ़ाइल में कोड की निम्न पंक्तियों में टाइप करें।

सेसेलेनियमआयातवेबड्राइवर
सेसेलेनियमवेबड्राइवर.सामान्य.चांबियाँ आयातचांबियाँ
विकल्प=वेबड्राइवर।क्रोम विकल्प()
विकल्प।नेतृत्वहीन = सत्य
ब्राउज़र=वेबड्राइवर।क्रोम(निष्पादन योग्य_पथ='./ड्राइवर/क्रोमड्राइवर',विकल्प=विकल्प)
ब्राउज़र।परोक्ष रूप से प्रतीक्षा(10)
ब्राउज़र।पाना('https://www.unixtimestamp.com/')
TIMESTAMP=ब्राउज़र।find_element_by_xpath('//h3[@][1]')
प्रिंट('वर्तमान टाइमस्टैम्प: %s'%(टाइमस्टैम्प।मूलपाठ.विभाजित करना('')[0]))
ब्राउज़र।बंद करे()

एक बार जब आप कर लें, तो सहेजें ex01.py पायथन लिपि।

लाइन 1 और 2 सभी आवश्यक सेलेनियम घटकों को आयात करता है।

पंक्ति 4 एक क्रोम विकल्प ऑब्जेक्ट बनाता है।

लाइन 5 क्रोम वेब ड्राइवर के लिए हेडलेस मोड सक्षम करती है।

लाइन 7 का उपयोग करके क्रोम ब्राउज़र ऑब्जेक्ट बनाता है क्रोमड्राइवर से द्विआधारी ड्राइवर/ निर्देशिका।

लाइन 8 का उपयोग सेलेनियम को 10 सेकंड के लिए निहित रूप से प्रतीक्षा करने के लिए कहने के लिए किया जाता है परोक्ष रूप से_प्रतीक्षा करें () ब्राउज़र विधि।

लाइन 10 ब्राउज़र में www.unixtimestamp.com को लोड करती है।

लाइन 12 XPath चयनकर्ता का उपयोग करके टाइमस्टैम्प तत्व ढूंढता है // h3 [@ वर्ग = 'पाठ-खतरे'] [1] और इसे में स्टोर करता है TIMESTAMP चर।

मुझे क्रोम डेवलपर टूल से XPath चयनकर्ता मिला है। जैसा कि आप देख सकते हैं, टाइमस्टैम्प पहले में है h3 वर्ग नाम के साथ तत्व पाठ-खतरा . वहाँ 2 है h3 वर्ग के साथ तत्व पाठ-खतरा .

लाइन 13 केवल उस तत्व से टाइमस्टैम्प प्रिंट करता है जिसे मैंने XPath चयनकर्ता का उपयोग करके चुना है और इसमें संग्रहीत किया गया है TIMESTAMP चर।

लाइन 14 ब्राउज़र को बंद कर देती है।

एक बार जब आप कर लें, तो पायथन स्क्रिप्ट चलाएँ ex01.py निम्नलिखित नुसार:

$ python3 ex01.पीयू

जैसा कि आप देख सकते हैं, वर्तमान टाइमस्टैम्प unixtimestamp.com से निकाला गया है और कंसोल पर मुद्रित किया गया है।

स्पष्ट प्रतीक्षा के साथ कार्य करना:

स्पष्ट प्रतीक्षा के साथ प्रयोग करने के लिए, एक नई पायथन लिपि बनाएं ex02.py अपनी परियोजना निर्देशिका में और उस फ़ाइल में कोड की निम्न पंक्तियों में टाइप करें।

सेसेलेनियमआयातवेबड्राइवर
सेसेलेनियमवेबड्राइवर.सामान्य.चांबियाँ आयातचांबियाँ
सेसेलेनियमवेबड्राइवर.सामान्य.द्वारा आयातद्वारा
सेसेलेनियमवेबड्राइवर.सहयोग.प्याज आयातवेबड्राइवररुको
सेसेलेनियमवेबड्राइवर.सहयोग आयातअपेक्षित_शर्तें
विकल्प=वेबड्राइवर।क्रोम विकल्प()
विकल्प।नेतृत्वहीन = सत्य
ब्राउज़र=वेबड्राइवर।क्रोम(निष्पादन योग्य_पथ='./ड्राइवर/क्रोमड्राइवर',विकल्प=विकल्प)
ब्राउज़र।पाना('https://www.unixtimestamp.com/')
प्रयत्न:
TIMESTAMP=वेबड्राइवररुको(ब्राउज़र, 10).जब तक(
अपेक्षित_शर्तें।उपस्थिति_ऑफ_तत्व_स्थित((द्वारा।XPATH, '
//h3[@][1]'
))
)
प्रिंट('वर्तमान टाइमस्टैम्प: %s'%(टाइमस्टैम्प।मूलपाठ.विभाजित करना('')[0]))
आखिरकार:
ब्राउज़र।बंद करे()

एक बार जब आप कर लें, तो सहेजें ex02.py पायथन लिपि।

लाइन 1-5 सेलेनियम लाइब्रेरी से सभी आवश्यक घटकों को आयात करती है।

लाइन 7 क्रोम विकल्प ऑब्जेक्ट बनाता है।

लाइन 8 क्रोम वेब ड्राइवर के लिए हेडलेस मोड को सक्षम करता है।

लाइन 10 का उपयोग करके क्रोम ब्राउज़र ऑब्जेक्ट बनाता है क्रोमड्राइवर से द्विआधारी ड्राइवर/ निर्देशिका।

लाइन 12 ब्राउज़र में www.unixtimestamp.com को लोड करती है।

स्पष्ट प्रतीक्षा को ट्राई-आखिरकार ब्लॉक में लागू किया गया है (पंक्ति 14-20 से)

लाइन १५-१७ उपयोग बनाता है वेबड्राइवर प्रतीक्षा करें () वस्तु। का पहला तर्क वेबड्राइवर प्रतीक्षा करें () ब्राउज़र ऑब्जेक्ट है, और दूसरा तर्क शर्त को पूरा करने के लिए अधिकतम अनुमत समय (सबसे खराब स्थिति) है, जो इस मामले में 10 सेकंड है।

में जब तक() खंड मैथा, अपेक्षित_कंडीशन्स.presence_of_element_location () विधि का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि तत्व का चयन करने का प्रयास करने से पहले तत्व मौजूद है। यहां, द्वारा.XPATH बताने के लिए प्रयोग किया जाता है उपस्थिति_ऑफ़_तत्व_स्थित () विधि है कि हमने तत्व का चयन करने के लिए XPath चयनकर्ता का उपयोग किया है। XPath चयनकर्ता है // h3 [@ वर्ग = 'पाठ-खतरे'] [1] .

एक बार तत्व मिल जाने के बाद, इसे में संग्रहीत किया जाता है TIMESTAMP चर।

पंक्ति 18 चयनित तत्व से केवल टाइमस्टैम्प प्रिंट करती है।

अंत में, लाइन 19-20 ब्राउज़र को बंद कर देती है।

एक बार जब आप कर लें, तो चलाएं ex02.py पायथन लिपि इस प्रकार है:

$ python3 ex02.पीयू

जैसा कि आप देख सकते हैं, unixtimestamp.com से वर्तमान टाइमस्टैम्प कंसोल पर मुद्रित है।

स्पष्ट प्रतीक्षा में तत्वों का चयन करना:

पिछले भाग में, मैंने प्रयोग किया है द्वारा.XPATH XPath चयनकर्ता का उपयोग करके तत्व का चयन करने के लिए। आप आईडी, टैग नाम, सीएसएस वर्ग का नाम, सीएसएस चयनकर्ता आदि का उपयोग करके भी तत्वों का चयन कर सकते हैं।

समर्थित चयन विधियां नीचे दी गई हैं:

द्वारा.XPATH - XPath चयनकर्ता का उपयोग करके तत्व/तत्वों का चयन करता है।

द्वारा.CLASS_NAME - CSS वर्ग के नाम का उपयोग करके तत्व/तत्वों का चयन करता है।

द्वारा.CSS_SELECTOR - CSS चयनकर्ता का उपयोग करके तत्व / तत्वों का चयन करता है।

By.ID - आईडी द्वारा तत्व का चयन करता है

नाम से - नाम से तत्व / तत्वों का चयन करता है।

द्वारा.TAG_NAME - HTML टैग नाम से तत्व/तत्वों का चयन करता है।

द्वारा.LINK_TEXT - के लिंक टेक्स्ट द्वारा तत्व/तत्वों का चयन करता है प्रति (एंकर) एचटीएमएल टैग।

द्वारा.PARTIAL_LINK_TEXT - के आंशिक लिंक टेक्स्ट द्वारा तत्व/तत्वों का चयन करता है प्रति (एंकर) एचटीएमएल टैग।

इनके बारे में अधिक जानकारी के लिए देखें पायथन सेलेनियम एपीआई दस्तावेज़ीकरण पृष्ठ .

स्पष्ट प्रतीक्षा में अपेक्षित शर्तें:

पहले के स्पष्ट प्रतीक्षा उदाहरण में, मैंने उपयोग किया है उपस्थिति_ऑफ़_तत्व_स्थित () उसकि विधि अपेक्षित_शर्तें यह सुनिश्चित करने के लिए स्पष्ट प्रतीक्षा स्थिति के रूप में कि जिस तत्व को मैं ढूंढ रहा था उसे चुनने से पहले मौजूद है।

वहाँ अन्य हैं अपेक्षित_शर्तें आप एक स्पष्ट प्रतीक्षा स्थिति के रूप में उपयोग कर सकते हैं। उनमें से कुछ हैं:

शीर्षक_इस (शीर्षक) - जाँचता है कि क्या पृष्ठ का शीर्षक है शीर्षक .

शीर्षक_शामिल है (आंशिक_शीर्षक) - जाँचता है कि क्या पृष्ठ के शीर्षक में शीर्षक का एक हिस्सा है आंशिक_शीर्षक .

दृश्यता_ऑफ़ (तत्व) - जाँचता है कि क्या तत्त्व उस पृष्ठ पर दिखाई देता है जो तत्व की चौड़ाई और ऊंचाई 0 से अधिक है।

दृश्यता_ऑफ़_तत्व_स्थित (लोकेटर) -

उपस्थिति_ऑफ़_तत्व_स्थित (लोकेटर) - सुनिश्चित करें कि तत्व स्थित है (द्वारा सुनने का यंत्र ) पेज पर मौजूद है। NS सुनने का यंत्र का एक टपल है (द्वारा, चयनकर्ता), जैसा कि मैंने स्पष्ट प्रतीक्षा उदाहरण में दिखाया है।

उपस्थिति_ऑफ_ऑल_तत्व_स्थित () - सुनिश्चित करें कि सभी तत्व से मेल खाते हैं सुनने का यंत्र पेज पर मौजूद है। NS सुनने का यंत्र एक है (द्वारा, चयनकर्ता) टपल

text_to_be_present_in_element(लोकेटर, टेक्स्ट) - जाँचता है कि क्या मूलपाठ द्वारा स्थित तत्व में मौजूद है सुनने का यंत्र . NS सुनने का यंत्र एक है (द्वारा, चयनकर्ता) टपल

element_to_be_clickable(लोकेटर) - जाँचता है कि तत्व द्वारा स्थित है या नहीं सुनने का यंत्र दृश्यमान और क्लिक करने योग्य है। NS सुनने का यंत्र एक है (द्वारा, चयनकर्ता) टपल

element_to_be_sSelected(लोकेटर) - जाँचता है कि तत्व द्वारा स्थित है या नहीं सुनने का यंत्र चूना गया। NS सुनने का यंत्र एक है (द्वारा, चयनकर्ता) टपल

चेतावनी_इस_वर्तमान () - पेज पर अलर्ट डायलॉग के मौजूद रहने की उम्मीद करें।

और भी कई हैं अपेक्षित_शर्तें आपके उपयोग के लिए उपलब्ध है। इनके बारे में अधिक जानकारी के लिए देखें पायथन सेलेनियम एपीआई दस्तावेज़ीकरण पृष्ठ .

निष्कर्ष:

इस लेख में, मैंने सेलेनियम के निहित और स्पष्ट प्रतीक्षा पर चर्चा की है। मैंने आपको यह भी दिखाया है कि कैसे एक निहित और स्पष्ट प्रतीक्षा के साथ काम करना है। आपको हमेशा अपनी सेलेनियम परियोजनाओं में स्पष्ट प्रतीक्षा का उपयोग करने का प्रयास करना चाहिए क्योंकि सेलेनियम जितना संभव हो सके प्रतीक्षा समय को कम करने का प्रयास करेगा। इस तरह, आपको हर बार अपनी सेलेनियम परियोजनाओं को चलाने के लिए एक विशिष्ट संख्या में सेकंड के लिए इंतजार नहीं करना पड़ेगा। स्पष्ट प्रतीक्षा को बहुत सारे सेकंड बचाना चाहिए।

सेलेनियम प्रतीक्षा के बारे में अधिक जानकारी के लिए देखें आधिकारिक सेलेनियम पायथन पुस्तकालय प्रलेखन पृष्ठ की प्रतीक्षा कर रहा है .