टूटे हुए लिंक कैसे खोजें? Selenium
⚡ स्मार्ट सारांश
टूटे हुए लिंक ढूँढना Selenium वेबड्राइवर में प्रत्येक एंकर टैग को एकत्रित करना और प्रत्येक को एक HTTP HEAD अनुरोध भेजना शामिल है। URLऔर प्रतिक्रिया कोड को पढ़ना। 400 या उससे अधिक कोड लौटाने वाले लिंक को टूटा हुआ माना जाता है, जबकि वैध लिंक 2xx कोड लौटाते हैं।

टूटी कड़ियाँ क्या हैं?
टूटे हुए लिंक वे लिंक होते हैं या URLवे सर्वर संपर्क से बाहर हैं। हो सकता है कि वे सर्वर त्रुटि के कारण निष्क्रिय हों या काम न कर रहे हों।
A URL HTTP स्टेटस कोड हमेशा 2xx होता है, जो मान्य होता है। अलग-अलग HTTP स्टेटस कोड होते हैं, जिनका अलग-अलग उद्देश्य होता है। अमान्य अनुरोध के लिए HTTP स्टेटस 4xx और 5xx होता है।
स्टेटस कोड की 4xx श्रेणी मुख्य रूप से क्लाइंट साइड त्रुटि के लिए है, और स्टेटस कोड की 5xx श्रेणी मुख्य रूप से सर्वर प्रतिक्रिया त्रुटि के लिए है।
जब तक हम उस पर क्लिक करके पुष्टि नहीं कर लेते, हम संभवतः यह पुष्टि नहीं कर पाएंगे कि वह लिंक काम कर रहा है या नहीं।
आपको टूटे हुए लिंक की जांच क्यों करनी चाहिए?
आपको हमेशा यह सुनिश्चित करना चाहिए कि साइट पर कोई टूटे हुए लिंक न हों, क्योंकि उपयोगकर्ता को किसी त्रुटि पृष्ठ पर नहीं पहुंचना चाहिए।
यह त्रुटि तब होती है जब नियम सही ढंग से अद्यतन नहीं किए जाते हैं, या अनुरोधित संसाधन सर्वर पर मौजूद नहीं होते हैं।
लिंक की मैन्युअल जांच एक थकाऊ काम है, क्योंकि प्रत्येक वेबपेज पर बड़ी संख्या में लिंक हो सकते हैं और सभी पेजों के लिए मैन्युअल प्रक्रिया को दोहराना पड़ता है।
एक स्वचालन स्क्रिप्ट का उपयोग करते हुए Selenium जो प्रक्रिया को स्वचालित करेगा वह अधिक उपयुक्त समाधान है।
टूटे हुए लिंक और छवियों की जांच कैसे करें? Selenium
टूटे हुए लिंक की जांच के लिए आपको निम्नलिखित चरण करने होंगे।
- टैग के आधार पर वेब पेज में मौजूद सभी लिंक एकत्र करें।
- लिंक के लिए एक HTTP अनुरोध भेजें और HTTP प्रतिक्रिया कोड पढ़ें।
- HTTP रिस्पॉन्स कोड के आधार पर पता लगाएं कि लिंक मान्य है या टूटा हुआ है।
- सभी कैप्चर किए गए लिंक के लिए इसे दोहराएं।
Code किसी वेबपेज पर टूटे हुए लिंक ढूंढना
नीचे वेब ड्राइवर कोड दिया गया है जो हमारे उपयोग मामले का परीक्षण करता है:
package automationPractice; import java.io.IOException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.Iterator; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class BrokenLinks { private static WebDriver driver = null; public static void main(String[] args) { // TODO Auto-generated method stub String homePage = "http://www.zlti.com"; String url = ""; HttpURLConnection huc = null; int respCode = 200; driver = new ChromeDriver(); driver.manage().window().maximize(); driver.get(homePage); List<WebElement> links = driver.findElements(By.tagName("a")); Iterator<WebElement> it = links.iterator(); while(it.hasNext()){ url = it.next().getAttribute("href"); System.out.println(url); if(url == null || url.isEmpty()){ System.out.println("URL is either not configured for anchor tag or it is empty"); continue; } if(!url.startsWith(homePage)){ System.out.println("URL belongs to another domain, skipping it."); continue; } try { huc = (HttpURLConnection)(new URL(url).openConnection()); huc.setRequestMethod("HEAD"); huc.connect(); respCode = huc.getResponseCode(); if(respCode >= 400){ System.out.println(url+" is a broken link"); } else{ System.out.println(url+" is a valid link"); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } driver.quit(); } }
टूटे हुए लिंक के कोड की व्याख्या
चरण 1: पैकेज आयात करें
डिफ़ॉल्ट पैकेजों के अतिरिक्त, नीचे दिए गए पैकेज को भी आयात करें:
import java.net.HttpURLConnection;
इस पैकेज में विधियों का उपयोग करके, हम HTTP अनुरोध भेज सकते हैं और प्रतिक्रिया से HTTP प्रतिक्रिया कोड प्राप्त कर सकते हैं।
चरण 2: वेब पेज में सभी लिंक एकत्रित करें
किसी वेबपेज के सभी लिंक की पहचान करें और उन्हें एक सूची में संग्रहित करें।
List<WebElement> links = driver.findElements(By.tagName("a"));
सूची में प्रवेश करने के लिए एक इटरेटर प्राप्त करें।
Iterator<WebElement> it = links.iterator();
चरण 3: पहचान करना और सत्यापन करना URL
इस भाग में, हम जाँच करेंगे कि क्या URL क्या यह किसी तीसरे पक्ष के डोमेन से संबंधित है या क्या URL यह खाली/शून्य है।
एंकर टैग का href प्राप्त करें और इसे url वेरिएबल में स्टोर करें।
url = it.next().getAttribute("href");
जांचें कि क्या URL यदि शर्त पूरी होती है तो शेष चरणों को छोड़ दें।
if(url == null || url.isEmpty()){ System.out.println("URL is either not configured for anchor tag or it is empty"); continue; }
जांचें कि क्या URL यह मुख्य डोमेन या किसी तृतीय पक्ष डोमेन से संबंधित है। यदि यह तृतीय पक्ष डोमेन से संबंधित है तो शेष चरणों को छोड़ दें।
if(!url.startsWith(homePage)){ System.out.println("URL belongs to another domain, skipping it."); continue; }
चरण 4: HTTP अनुरोध भेजें
एचटीटीपीURLकनेक्शन क्लास में HTTP अनुरोध भेजने और HTTP प्रतिक्रिया कोड को कैप्चर करने के लिए विधियाँ हैं। इसलिए, openConnection() विधि का आउटपुट (URLकनेक्शन) को Http में टाइप कास्ट किया गया हैURLकनेक्शन।
huc = (HttpURLConnection)(new URL(url).openConnection());
हम अनुरोध प्रकार को "GET" के बजाय "HEAD" के रूप में सेट कर सकते हैं, ताकि केवल हेडर ही वापस किए जाएं और दस्तावेज़ का मुख्य भाग वापस न किया जाए।
huc.setRequestMethod("HEAD");
connect() मेथड को कॉल करने पर, यूआरएल से वास्तविक कनेक्शन स्थापित हो जाता है और अनुरोध भेजा जाता है।
huc.connect();
चरण 5: लिंक मान्य करना
getResponse का उपयोग करनाCode() विधि का उपयोग करके, हम अनुरोध के लिए प्रतिक्रिया कोड प्राप्त कर सकते हैं।
respCode = huc.getResponseCode();
रिस्पॉन्स कोड के आधार पर, हम लिंक की स्थिति की जांच करने का प्रयास करेंगे।
if(respCode >= 400){ System.out.println(url+" is a broken link"); } else{ System.out.println(url+" is a valid link"); }
इस प्रकार, हम किसी वेब पेज से सभी लिंक प्राप्त कर सकते हैं और यह प्रिंट कर सकते हैं कि लिंक वैध हैं या टूटे हुए हैं।
किसी वेब पेज के सभी लिंक कैसे प्राप्त करें
वेब में सामान्य प्रक्रियाओं में से एक परीक्षण इसका उद्देश्य यह जांचना है कि क्या पेज पर मौजूद सभी लिंक काम कर रहे हैं। यह आसानी से निम्नलिखित के संयोजन का उपयोग करके किया जा सकता है Java प्रत्येक लूप के लिए, तत्व खोजें() & By.tagName(“a”) विधि.
findElements() विधि टैग 'a' वाले वेब एलिमेंट्स की एक सूची लौटाती है। एक for-each लूप का उपयोग करके, प्रत्येक एलिमेंट तक पहुँचा जाता है।
नीचे दिया गया WebDriver कोड प्रत्येक लिंक की जाँच करता है Mercury टूर्स के होमपेज पर जाकर यह पता लगाया जा सकता है कि कौन से प्रोजेक्ट काम कर रहे हैं और कौन से अभी निर्माणाधीन हैं।
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import java.util.List; import java.util.concurrent.TimeUnit; import org.openqa.selenium.*; public class P1 { public static void main(String[] args) { String baseUrl = "https://demo.guru99.com/test/newtours/"; System.setProperty("webdriver.chrome.driver", "G:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); String underConsTitle = "Under Construction: Mercury Tours"; driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); driver.get(baseUrl); List<WebElement> linkElements = driver.findElements(By.tagName("a")); String[] linkTexts = new String[linkElements.size()]; int i = 0; //extract the link texts of each link element for (WebElement e : linkElements) { linkTexts[i] = e.getText(); i++; } //test each link for (String t : linkTexts) { driver.findElement(By.linkText(t)).click(); if (driver.getTitle().equals(underConsTitle)) { System.out.println("\"" + t + "\"" + " is under construction."); } else { System.out.println("\"" + t + "\"" + " is working."); } driver.navigate().back(); } driver.quit(); } }
आउटपुट नीचे दर्शाए गए आउटपुट के समान होना चाहिए।
- इमेज लिंक तक पहुंचने के लिए By.cssSelector() और By.xpath() विधियों का उपयोग किया जाता है।
समस्या निवारण
एक अपवाद स्वरूप, कोड द्वारा एक्सेस किया गया पहला लिंक "होम" लिंक हो सकता है। ऐसे में, driver.navigate.back() क्रिया एक खाली पृष्ठ प्रदर्शित करेगी, क्योंकि पहली क्रिया ब्राउज़र खोलना है। ड्राइवर खाली ब्राउज़र में अन्य सभी लिंक नहीं खोज पाएगा। इसलिए IDE एक अपवाद उत्पन्न करेगा और शेष कोड निष्पादित नहीं होगा। इसे If लूप का उपयोग करके आसानी से हल किया जा सकता है।


.png)