सेलेनियम वेबड्राइवर का उपयोग करके सभी / टूटे हुए लिंक को कैसे खोजें

विषय - सूची:

Anonim

टूटे हुए लिंक क्या हैं?

टूटे हुए लिंक ऐसे लिंक या URL हैं, जो उपलब्ध नहीं हैं। कुछ सर्वर त्रुटि के कारण वे डाउन हो सकते हैं या कार्य नहीं कर सकते हैं

URL में हमेशा 2xx के साथ एक स्थिति होगी जो मान्य है। अलग-अलग HTTP स्टेटस कोड हैं जिनके अलग-अलग उद्देश्य हैं। अमान्य अनुरोध के लिए, HTTP स्थिति 4xx और 5xx है।

स्टेटस कोड की 4xx क्लास मुख्य रूप से क्लाइंट साइड एरर के लिए है, और स्टेटस कोड्स की 5xx क्लास मुख्य रूप से सर्वर रिस्पॉन्स एरर के लिए है।

यदि हम उस लिंक पर काम कर रहे हैं या नहीं जब तक हम उस पर क्लिक नहीं करते हैं और पुष्टि नहीं करते हैं, तब तक हम इसकी पुष्टि करने में असमर्थ होंगे।

आपको टूटे हुए लिंक की जांच क्यों करनी चाहिए?

आपको हमेशा यह सुनिश्चित करना चाहिए कि साइट पर कोई टूटे हुए लिंक नहीं हैं क्योंकि उपयोगकर्ता को एक त्रुटि पृष्ठ पर नहीं उतरना चाहिए।

त्रुटि तब होती है जब नियमों को सही ढंग से अपडेट नहीं किया जाता है, या सर्वर पर अनुरोधित संसाधन मौजूद नहीं हैं।

लिंक की मैनुअल जाँच एक थकाऊ काम है, क्योंकि प्रत्येक वेबपेज में बड़ी संख्या में लिंक हो सकते हैं और सभी पेजों के लिए मैनुअल प्रक्रिया को दोहराना पड़ता है।

सेलेनियम का उपयोग करके एक स्वचालन स्क्रिप्ट जो प्रक्रिया को स्वचालित करेगी एक अधिक उपयुक्त समाधान है।

Broken Links और Images को कैसे Check करें

टूटे हुए लिंक की जाँच के लिए, आपको निम्न चरण करने होंगे।

  1. टैग के आधार पर वेब पेज के सभी लिंक एकत्र करें।
  2. लिंक के लिए HTTP अनुरोध भेजें और HTTP प्रतिक्रिया कोड पढ़ें।
  3. पता लगाएँ कि क्या HTTP प्रतिक्रिया कोड के आधार पर लिंक वैध है या टूट गया है।
  4. कैप्चर किए गए सभी लिंक के लिए इसे दोहराएं।

एक वेबपेज पर टूटे हुए लिंक को खोजने के लिए कोड

नीचे वेब ड्राइवर कोड है जो हमारे उपयोग के मामले का परीक्षण करता है:

पैकेज ऑटोमेशन प्रैक्टिस;आयात java.io.IOException;आयात java.net.HttpURLConnection;आयात java.net.alformedURLException;आयात java.net.URL;आयात java.util.Iterator;आयात java.util.ist;आयात org.openqa.selenium.By;आयात org.openqa.selenium.WebDriver;आयात org.openqa.selenium.WebElement;आयात org.openqa.selenium.chrome.ChromeDriver;सार्वजनिक वर्ग BrokenLinks {निजी स्थिर वेबड्राइवर चालक = अशक्त;सार्वजनिक स्थैतिक शून्य main (String [] args) {// TODO ऑटो-जनरेट विधि ठूंठस्ट्रिंग होमपेज = "http://www.zlti.com";स्ट्रिंग url = "";HttpURLConnection huc = null;int respCode = 200;ड्राइवर = नया क्रोमड्राइवर ();Driver.manage ()। window ()। मैक्सिमम ();Driver.get (होमपेज);सूची  लिंक = driver.findElements (By.tagName ("a"));Iterator  it = links.iterator ();जबकि (it.hasNext ()) {url = it.next ()। getAttribute ("href");System.out.println (url);if (url == null || url.isEmpty ()) {System.out.println ("URL या तो एंकर टैग के लिए कॉन्फ़िगर नहीं किया गया है या यह रिक्त है");जारी रखें;}अगर (url.startsWith (होमपेज)) {System.out.println ("URL किसी अन्य डोमेन से संबंधित है, इसे लंघन करना");जारी रखें;}प्रयत्न {huc = (HttpURLConnection) (नया URL (url) .openConnection ());huc.setRequestMethod ("HEAD");huc.connect ();respCode = huc.getResponseCode ();अगर (respCode> = 400) {System.out.println (url + "एक टूटी हुई कड़ी है");}अन्य{System.out.println (url + "एक वैध लिंक है");}} कैच (MalformedURLException e) {// TODO ऑटो-जनरेट कैच ब्लॉकe.printStackTrace ();} कैच (IOException e) {// TODO ऑटो-जनरेट कैच ब्लॉकe.printStackTrace ();}}Driver.quit ();}}

कोड उदाहरण की व्याख्या करना

चरण 1: आयात पैकेज

डिफ़ॉल्ट पैकेज के अलावा पैकेज से नीचे आयात करें:

आयात java.net.HttpURLConnection;

इस पैकेज में विधियों का उपयोग करके, हम HTTP अनुरोध भेज सकते हैं और प्रतिक्रिया से HTTP प्रतिक्रिया कोड कैप्चर कर सकते हैं।

चरण 2: वेब पेज के सभी लिंक एकत्र करें

एक वेबपेज में सभी लिंक को पहचानें और उन्हें सूची में संग्रहीत करें।

सूची  लिंक = driver.findElements (By.tagName ("a"));

सूची के माध्यम से पार करने के लिए Iterator प्राप्त करें।

Iterator  it = links.iterator ();

चरण 3: पहचानने और मान्य करने वाले URL

इस भाग में, हम यह जांच करेंगे कि क्या URL थर्ड पार्टी डोमेन से संबंधित है या URL खाली / रिक्त है या नहीं।

लंगर टैग के href प्राप्त करें और इसे url वैरिएबल में स्टोर करें।

url = it.next ()। getAttribute ("href");

जांचें कि क्या URL अशक्त या खाली है और शेष चरणों को छोड़ दें यदि स्थिति संतुष्ट है।

if (url == null || url.isEmpty ()) {System.out.println ("URL या तो एंकर टैग के लिए कॉन्फ़िगर नहीं किया गया है या यह रिक्त है");जारी रखें;}

जांचें कि URL मुख्य डोमेन या तृतीय पक्ष से संबंधित है या नहीं। यदि यह तीसरे पक्ष के डोमेन का है तो शेष चरणों को छोड़ दें।

 अगर (url.startsWith (होमपेज)) {System.out.println ("URL किसी अन्य डोमेन से संबंधित है, इसे लंघन करना");जारी रखें;}

चरण 4: http अनुरोध भेजें

HttpURLConnection वर्ग के पास HTTP अनुरोध भेजने और HTTP प्रतिक्रिया कोड पर कब्जा करने के तरीके हैं। तो, OpenConnection () मेथड (URLConnection) का आउटपुट HttpURLConnection को टाइप किया गया है।

huc = (HttpURLConnection) (नया URL (url) .openConnection ());

हम "GET" के बजाय "HEAD" के रूप में अनुरोध प्रकार सेट कर सकते हैं। ताकि केवल शीर्ष लेख लौटाए जाएं और दस्तावेज़ निकाय न हों।

huc.setRequestMethod ("HEAD");

कनेक्ट कनेक्ट () विधि पर, url के लिए वास्तविक कनेक्शन स्थापित किया गया है और अनुरोध भेजा गया है।

huc.connect ();

चरण 5: लिंक मान्य करना

GetResponseCode () विधि का उपयोग करके हम अनुरोध के लिए प्रतिक्रिया कोड प्राप्त कर सकते हैं

respCode = huc.getResponseCode ();

प्रतिक्रिया कोड के आधार पर हम लिंक स्थिति की जांच करने का प्रयास करेंगे।

अगर (respCode> = 400) {System.out.println (url + "एक टूटी हुई कड़ी है");}अन्य{System.out.println (url + "एक वैध लिंक है");}

इस प्रकार, हम वेब पेज से सभी लिंक प्राप्त कर सकते हैं और प्रिंट कर सकते हैं कि क्या लिंक वैध या टूटे हुए हैं।

आशा है कि यह ट्यूटोरियल सेलेनियम का उपयोग करके टूटे हुए लिंक की जाँच करने में आपकी मदद करता है।

वेब पेज के सभी लिंक कैसे प्राप्त करें

वेब परीक्षण में सामान्य प्रक्रियाओं में से एक यह परीक्षण करना है कि क्या पृष्ठ के भीतर मौजूद सभी लिंक काम कर रहे हैं। यह आसानी से जावा के लिए प्रत्येक लूप , findElements () और By.tagName ("a") विधि के संयोजन का उपयोग करके किया जा सकता है ।

FindElements () विधि, टैग के साथ वेब तत्वों की सूची लौटाती है। प्रत्येक लूप के लिए, प्रत्येक तत्व का उपयोग किया जाता है।

नीचे दिए गए WebDriver कोड, मरकरी टूर्स होमपेज के प्रत्येक लिंक को यह निर्धारित करने के लिए चेक करते हैं कि वे काम कर रहे हैं और जो अभी भी निर्माणाधीन हैं।

आयात org.openqa.selenium.By;आयात org.openqa.selenium.WebDriver;आयात org.openqa.selenium.chrome.ChromeDriver;आयात java.util.ist;आयात java.util.concurrent.TimeUnit;आयात org.openqa.selenium। *;सार्वजनिक वर्ग P1 {सार्वजनिक स्थैतिक शून्य main (String [] args) {स्ट्रिंग आधार = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");WebDriver ड्राइवर = नया ChromeDriver ();स्ट्रिंग अंडरकंटल = "अंडर कंस्ट्रक्शन: मर्करी टूर्स";Driver.manage ()। टाइमआउट ()। निहितार्थ (5, TimeUnit.SECONDS);Driver.get (baseUrl);सूची  linkElements = driver.findElements (By.tagName ("a"));स्ट्रिंग [] linkTexts = नया स्ट्रिंग [linkElements.size ()];int i = 0;// प्रत्येक लिंक तत्व के लिंक ग्रंथों को निकालेंके लिए (WebElement e: linkElements) {linkTexts [i] = e.getText ();मैं ++;}// प्रत्येक लिंक का परीक्षण करेंके लिए (स्ट्रिंग t: लिंकटैक्स) {Driver.findElement (By.linkText (t))। क्लिक ();अगर (driver.getTitle ()। बराबर (अंडरकंटल)) {System.out.println ("\" "+ t +" \ ""+ "निर्माणाधीन है।");} अन्य {System.out.println ("\" "+ t +" \ ""+ "काम कर रहा है।");}Driver.navigate ()) वापस ();}Driver.quit ();}}

आउटपुट नीचे दिए गए संकेत के समान होना चाहिए।

  • एक्सेस छवि लिंक By.cssSelector () और By.xpath () विधियों का उपयोग करके किया जाता है।
  • समस्या निवारण

    एक अलग मामले में, कोड द्वारा एक्सेस किया गया पहला लिंक "होम" लिंक हो सकता है। ऐसे मामले में, driver.navigate.back () एक्शन एक खाली पेज दिखाएगा क्योंकि 1 एक्शन एक ब्राउज़र खोल रहा है। ड्राइवर को खाली ब्राउज़र में अन्य सभी लिंक नहीं मिलेंगे। इसलिए आईडीई एक अपवाद को फेंक देगा और बाकी कोड निष्पादित नहीं करेगा। यह एक लूप का उपयोग करके आसानी से नियंत्रित किया जा सकता है।