टूटे हुए लिंक कैसे खोजें? Selenium

⚡ स्मार्ट सारांश

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

  • 🔗 परिभाषा: टूटा हुआ लिंक एक URL जिस तक नहीं पहुंचा जा सकता, आमतौर पर 4xx या 5xx त्रुटि आती है।
  • 🧭 यह क्यों मायने रखता है: टूटे हुए लिंक उपयोगकर्ता अनुभव और एसईओ को नुकसान पहुंचाते हैं, इसलिए स्वचालित जांच धीमी मैन्युअल सत्यापन की जगह लेती है।
  • 📥 लिंक एकत्रित करें: पेज पर मौजूद सभी एंकर एलिमेंट्स को एक सूची में एकत्रित करने के लिए findElements के साथ By.tagName(“a”) का उपयोग करें।
  • 📡 HEAD अनुरोध भेजें: एक HTTP फ़ाइल खोलेंURLकनेक्शन स्थापित करें, विधि को HEAD पर सेट करें, और प्रति प्रतिक्रिया कोड पढ़ें URL.
  • स्थिति का सत्यापन करें: 400 या उससे अधिक के रिस्पॉन्स कोड को टूटा हुआ मानें और 2xx कोड को कार्यशील लिंक मानें।

टूटे हुए लिंक कैसे खोजें? Selenium

टूटी कड़ियाँ क्या हैं?

टूटे हुए लिंक वे लिंक होते हैं या URLवे सर्वर संपर्क से बाहर हैं। हो सकता है कि वे सर्वर त्रुटि के कारण निष्क्रिय हों या काम न कर रहे हों।

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

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

जब तक हम उस पर क्लिक करके पुष्टि नहीं कर लेते, हम संभवतः यह पुष्टि नहीं कर पाएंगे कि वह लिंक काम कर रहा है या नहीं।

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

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

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

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

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

टूटे हुए लिंक और छवियों की जांच कैसे करें? Selenium

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

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

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 लूप का उपयोग करके आसानी से हल किया जा सकता है।

अक्सर पूछे जाने वाले प्रश्न

Selenium सभी एंकर टैग एकत्र करता है, प्रत्येक को एक HTTP HEAD अनुरोध भेजता है URLऔर 400 या उससे अधिक का मान लौटाने वाले किसी भी लिंक को टूटा हुआ चिह्नित करता है।

4xx कोड क्लाइंट-साइड समस्या को इंगित करता है, जैसे कि कोई पेज गायब होना, जबकि 5xx कोड अनुरोध को संसाधित करते समय सर्वर-साइड विफलता को इंगित करता है।

हाँ। छवि स्रोत By.cssSelector() या By.xpath() का उपयोग करके एकत्र किए जाते हैं, और फिर प्रत्येक स्रोत URL इसका सत्यापन इसके HTTP प्रतिक्रिया कोड के माध्यम से किया जाता है।

हाँ। AI आधारित क्रॉलर पेजों को स्कैन करते हैं, लिंक फॉलो करते हैं और टूटे हुए या रीडायरेक्ट करने वाले लिंक को चिह्नित करते हैं। URLबिना मैन्युअल स्क्रिप्टिंग के।

एआई समय के साथ लिंक की स्थिति पर नजर रखता है, विफलताओं का पूर्वानुमान लगाता है और प्रतिस्थापन का सुझाव देता है, जिससे बार-बार मैन्युअल लिंक ऑडिट करने की आवश्यकता कम हो जाती है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: