2025, Oct 31 00:34
Selenium‑Chrome में Bing Maps लोड फेल: --disable-3d-apis का असर और समाधान
क्यों Selenium के Chrome सत्र में Bing Maps --disable-3d-apis से लोड फेल होता है, और फ्लैग हटाकर या --disable-accelerated-2d-canvas के साथ स्थिर समाधान कैसे पाएं.
Selenium से नियंत्रित Chrome सत्र में Bing Maps खोलना कभी‑कभी अचानक असफल हो सकता है, भले ही पहले सब कुछ भरोसेमंद ढंग से चल रहा हो. यह समस्या एक खास Chrome कमांड‑लाइन स्विच से ट्रिगर हो सकती है, जो पेज को उसकी ग्राफिक्स लेयर लोड करने से रोक देता है. नीचे बिना पूरी ऑटोमेशन संरचना बदले, समस्या की जाँच और समाधान के लिए एक केंद्रित मार्गदर्शिका दी गई है.
समस्या का संदर्भ
ब्राउज़र को अनेक फ्लैग्स के साथ लॉन्च किया गया था. कुछ समय तक सब सामान्य रहा, फिर मैप पेज ने त्रुटि दिखानी शुरू कर दी और लोड होने से इनकार कर दिया. नीचे दिया गया छोटा स्निपेट उसी स्थिति को दोहराता है.
import os, sys
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
chrome_cfg = Options()
chrome_cfg.add_argument("start-maximized")
chrome_cfg.add_argument('--use-gl=swiftshader')
chrome_cfg.add_argument('--enable-unsafe-webgpu')
chrome_cfg.add_argument('--enable-unsafe-swiftshader')
chrome_cfg.add_argument("--disable-3d-apis")
chrome_cfg.add_argument('--disable-gpu')
chrome_cfg.add_argument('--no-sandbox')
chrome_cfg.add_argument('--disable-dev-shm-usage')
chrome_cfg.add_argument("start-maximized")
chrome_cfg.add_argument('--log-level=3')
chrome_cfg.add_experimental_option("prefs", {"profile.default_content_setting_values.notifications": 1})
chrome_cfg.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_cfg.add_experimental_option('excludeSwitches', ['enable-logging'])
chrome_cfg.add_experimental_option('useAutomationExtension', False)
chrome_cfg.add_argument('--disable-blink-features=AutomationControlled')
svc = Service()
maps_url = "https://www.bing.com/maps"
browser = webdriver.Chrome(service=svc, options=chrome_cfg)
browser.get(maps_url)
input("Press!")
असल में गड़बड़ी क्या है
जो स्विच पेज को रोक रहा है, वह है --disable-3d-apis. यह फ्लैग चालू रहने पर Bing Maps इनिशियलाइज़ नहीं हो पाता. फ्लैग हटाते ही सामान्य व्यवहार लौट आता है. यह उसी अवलोकन से मेल खाता है कि जैसे ही यह स्विच Chrome को पास नहीं किया जाता, कोड फिर से काम करने लगता है.
यदि आपको GPU को निष्क्रिय ही रखना है, तो पूरी 3D स्टैक को ब्लॉक किए बिना रेंडरिंग व्यवहार नियंत्रित किया जा सकता है. --disable-accelerated-2d-canvas जोड़ने से, GPU बंद होने पर सॉफ्टवेयर रेंडरिंग पर फॉलबैक रुक जाता है; यह --disable-gpu के साथ मिलकर उपयोगी साबित होता है.
कारगर समाधान
समाधान यह है कि --disable-3d-apis पास करना बंद करें. चाहें तो इसे --disable-accelerated-2d-canvas से बदल सकते हैं. पॉप‑अप, विज्ञापन, नोटिफिकेशन और एक्सटेंशन के हस्तक्षेप को कम करने के लिए कुछ अतिरिक्त फ्लैग्स से सत्र को और स्थिर बनाया जा सकता है. यदि साइट सहमति वाला डायलॉग दिखाती है, तो एलिमेंट के id पर आधारित स्पष्ट wait‑और‑click से फ्लो निर्धार्य बना रहता है.
import os, sys
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
chrome_cfg = Options()
chrome_cfg.add_argument("start-maximized")
chrome_cfg.add_argument('--use-gl=swiftshader')
chrome_cfg.add_argument('--enable-unsafe-webgpu')
chrome_cfg.add_argument('--enable-unsafe-swiftshader')
# chrome_cfg.add_argument("--disable-3d-apis")  # पेज को इनिशियलाइज़ होने देने के लिए हटाया गया
chrome_cfg.add_argument("--disable-accelerated-2d-canvas")  # --disable-gpu के साथ अच्छी तरह काम करता है
chrome_cfg.add_argument('--disable-gpu')
chrome_cfg.add_argument('--no-sandbox')
chrome_cfg.add_argument('--disable-dev-shm-usage')
chrome_cfg.add_argument("start-maximized")
chrome_cfg.add_argument('--log-level=3')
chrome_cfg.add_experimental_option("prefs", {"profile.default_content_setting_values.notifications": 1})
chrome_cfg.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_cfg.add_experimental_option('excludeSwitches', ['enable-logging'])
chrome_cfg.add_experimental_option('useAutomationExtension', False)
chrome_cfg.add_argument('--disable-blink-features=AutomationControlled')
# UI की सतह से रनटाइम शोर कम करें
chrome_cfg.add_argument("--disable-popup-blocking")
chrome_cfg.add_argument("--disable-ads")
chrome_cfg.add_argument("--disable-notifications")
chrome_cfg.add_argument("--disable-extensions")
svc = Service()
maps_url = "https://www.bing.com/maps"
browser = webdriver.Chrome(service=svc, options=chrome_cfg)
browser.get(maps_url)
# यदि दिखे तो उसकी id द्वारा सहमति वाले "Reject" बटन पर क्लिक करें
def press_by_id(elem_id="bnp_btn_reject", timeout=10):
    try:
        WebDriverWait(browser, timeout).until(
            EC.element_to_be_clickable((By.ID, elem_id))
        ).click()
    except Exception as exc:
        print(f"Error clicking button: {exc}")
press_by_id()
यह क्यों अहम है
ग्राफिक्स और UI सुविधाओं को व्यापक फ्लैग्स से दबाने वाली ऑटोमेशन आधुनिक वेब ऐप्स के सामने नाजुक हो सकती है. जब --disable-3d-apis जैसा एक स्विच ही मैप को रेंडर होने से रोक दे, तो पूरा टेस्ट या डेटा-संग्रह प्रवाह थम जाता है. कौन‑से स्विच सुरक्षित हैं और कौन‑से अहम कार्यक्षमता को शॉर्ट‑सर्किट कर देते हैं — यह समझ रखने से बीच‑बीच में आने वाली विफलताओं और थकाऊ ट्रायेज से बचाव होता है.
समूचे 3D को बंद करने के बजाय लक्षित तरीका अपनाने से सत्र स्थिर रहता है, और GPU निष्क्रिय जैसे प्रतिबंध भी कायम रहते हैं. साथ ही ट्रबलशूटिंग भी आसान हो जाती है: पेज लोड होना रुके तो सबसे पहले शंका उन टॉगल्स पर जाए जो रेंडरिंग में सीधा दखल देते हैं.
सार निष्कर्ष
यदि Selenium में Bing Maps लोड नहीं होता, तो --disable-3d-apis की जाँच करें और उसे हटा दें. सॉफ्टवेयर रेंडरिंग पर फॉलबैक रोकने के लिए --disable-gpu के साथ --disable-accelerated-2d-canvas का उपयोग करें. पॉप‑अप, विज्ञापनों, नोटिफिकेशनों और एक्सटेंशनों को दबाकर ब्राउज़र सतह को साफ रखें, और सहमति प्रॉम्प्ट्स को id के आधार पर संभालने के लिए स्पष्ट wait का इस्तेमाल करें. लॉन्च फ्लैग्स में छोटे, सोच‑समझकर किए गए बदलाव आपके बड़े ऑटोमेशन डिज़ाइन को छुए बिना भरोसेमंदी वापस ला सकते हैं.