2025, Oct 20 18:32

Selenium में Chrome अनपैक्ड एक्सटेंशन लोड न होने का समाधान (137–138)

Selenium के साथ Chrome 137-138 पर अनपैक्ड एक्सटेंशन लोड नहीं हो रहा? कारण, Manifest V2/V3 संगतता और DisableLoadExtensionCommandLineSwitch वाले समाधान जानें.

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

समस्या को दोहराना

यह Python स्क्रिप्ट Chrome चलाती है, उसे एक अनपैक्ड एक्सटेंशन फ़ोल्डर की ओर संकेत करती है और Google Maps खोलती है। Chrome 138.0.7204.100 (Ubuntu 24.04) पर एक्सटेंशन दिखाई नहीं देता:

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
ext_dir = 'Pano-fetch'
chr_opts = Options()
drv_svc = Service("/usr/bin/chromedriver")
chr_opts.add_argument('--load-extension={}'.format(ext_dir))
chr_opts.add_experimental_option("detach", True)
browser = webdriver.Chrome(service=drv_svc, options=chr_opts)
browser.get("https://www.google.com/maps")
time.sleep(10)

असल में एक्सटेंशन को क्या रोक रहा है

हालिया Chrome रिलीज़ में दो अलग-अलग बदलाव हैं जो इस स्थिति को प्रभावित करते हैं। पहला, Chrome 137 से डिफ़ॉल्ट रूप से --load-extension स्विच बंद रहता है, जब तक आप इसे एक विशेष फ़ीचर टॉगल से स्पष्ट रूप से सक्षम न करें। दूसरा, Chrome 138 के एक अपडेट ने Manifest V2 एक्सटेंशन्स का सपोर्ट हटा दिया। यदि आपके अनपैक्ड डायरेक्टरी में V2 एक्सटेंशन है, तो Chrome उसे लोड करने से सीधे इनकार कर सकता है।

पहली बाधा को ठीक करना आसान है। दूसरी पूरी तरह उस एक्सटेंशन पर निर्भर करती है जिसे आप इस्तेमाल करना चाहते हैं। मूल संदर्भ में जिस एक्सटेंशन का ज़िक्र है, उसे आखिरी बार 2018 में अपडेट किया गया था, यानी संभव है कि वह अभी भी Manifest V2 पर हो और इसलिए V3 लागू करने वाले Chrome पर लोड न हो। ऐसी स्थिति में या तो Manifest V3-संगत एक्सटेंशन अपनाएँ, या ऐसा Chrome बिल्ड चलाएँ जहाँ V2 अब भी स्वीकार है, जैसे chrome-for-testing के माध्यम से।

कारगर समाधान और अद्यतन उदाहरण

पहले अनपैक्ड एक्सटेंशन्स के लिए कमांड-लाइन स्विच को दोबारा सक्षम करें। Chrome विकल्पों में यह आर्गुमेंट जोड़ें:

--disable-features=DisableLoadExtensionCommandLineSwitch

यह करने के बाद बाकी प्रवाह वैसा ही रहता है। संशोधित स्क्रिप्ट नीचे है:

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
ext_dir = 'Pano-fetch'
chr_opts = Options()
drv_svc = Service("/usr/bin/chromedriver")
chr_opts.add_argument('--disable-features=DisableLoadExtensionCommandLineSwitch')
chr_opts.add_argument('--load-extension={}'.format(ext_dir))
chr_opts.add_experimental_option("detach", True)
browser = webdriver.Chrome(service=drv_svc, options=chr_opts)
browser.get("https://www.google.com/maps")
time.sleep(10)

यदि इस बदलाव के बाद भी आपका एक्सटेंशन नहीं दिखता, तो संभवतः Chrome 138 पर Manifest V2 के हटने की वजह से है। ऐसे में Manifest V3-संगत एक्सटेंशन प्रयोग करें। विकल्प के तौर पर, chrome-for-testing से कोई ऐसा Chrome बिल्ड इंस्टॉल करें जिसमें V2 अभी भी काम करता हो।

ऑटोमेशन के लिए यह क्यों मायने रखता है

एंड-टू-एंड टेस्ट और स्क्रैपिंग पाइपलाइनों के लिए एक्सटेंशन सपोर्ट कार्यात्मकता और स्थिरता—दोनों से जुड़ा मुद्दा है। Chrome का एक अपडेट चुपचाप यह धारणा तोड़ सकता है कि अनपैक्ड एक्सटेंशन कैसे लोड होते हैं, या पुरानी मैनिफेस्ट संस्करण की अनुमति है या नहीं। फ्लेकी रन से बचने के लिए जरूरी है कि आपका टेस्ट वातावरण ब्राउज़र रिलीज़ व्यवहार के अनुरूप रहे और आपको पता हो कि किन स्विचों की ज़रूरत है।

Chrome 139 आने पर स्थिति बदल सकती है—तैयार रहें।

यह भी उल्लेखनीय है कि एक रिपोर्टेड सेटअप में केवल पहला समाधान ही पर्याप्त था और मौजूदा Chrome बिल्ड पर Manifest V2 एक्सटेंशन फिर भी लोड हो गया। आपके परिणाम रिलीज़ और अपडेट स्टेट पर निर्भर कर सकते हैं।

मुख्य निष्कर्ष

यदि Chrome 137 या बाद के संस्करणों पर Selenium के साथ अनपैक्ड एक्सटेंशन दिखाई नहीं देता, तो पहले --disable-features=DisableLoadExtensionCommandLineSwitch जोड़कर कमांड-लाइन स्विच सक्षम करें। अगर Chrome 138 पर फिर भी विफल हो, तो मान लें कि Manifest V2 स्वीकार नहीं है और Manifest V3-संगत एक्सटेंशन अपनाएँ, या chrome-for-testing की मदद से ऐसा Chrome संस्करण चलाएँ जिसमें V2 समर्थित हो। आने वाले रिलीज़ पर नज़र रखना समझदारी है, क्योंकि भविष्य में एक्सटेंशन लोडिंग का व्यवहार फिर बदल सकता है।

यह लेख StackOverflow पर प्रश्न (लेखक: Daniel AG) और Michael Mintz के उत्तर पर आधारित है।