2025, Oct 05 09:31
headless मोड में Selenium Chrome के शोरगुल लॉग कैसे शांत करें
Headless Chrome में Selenium चलाते समय शोर भरे लॉग्स दबाएँ: ChromeDriver आउटपुट os.devnull भेजें, Python लॉगर्स CRITICAL रखें और Chrome का log-level घटाएँ.
हेडलैस मोड में Selenium Chrome चलाते समय शोर भरे स्टार्टअप लॉग्स को शांत करना अक्सर एक साधारण टॉगल जैसा लगता है—जब तक कि ऐसा नहीं होता। एक आम गलती यह है कि एक समय में सिर्फ एक ही चीज़ काम करती दिखती है: या तो हेडलैस सक्रिय रहता है लेकिन लॉग्स हर जगह फैल जाते हैं, या लॉग्स दब जाते हैं पर ब्राउज़र खुलकर सामने आ जाता है। असल वजह यह है कि संदेश अलग‑अलग परतों से आते हैं, और हर स्रोत को अलग से शांत करना पड़ता है।
समस्या को पुन: उत्पन्न करना
नीचे दिया गया स्निपेट शर्त के आधार पर हेडलैस सक्षम करता है और Chrome विकल्पों के माध्यम से लॉग्स को शांत रखने की कोशिश करता है, फिर भी कुछ रन में आउटपुट दिखाई देगा:
import sys
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
chrome_prefs = webdriver.ChromeOptions()
chrome_prefs.add_experimental_option("excludeSwitches", ["enable-logging"])  
if not ("-dhl" in sys.argv or "--disable-headless" in sys.argv):
    chrome_prefs.add_argument("--headless=new")
browser_client = webdriver.Chrome(
    service=Service(ChromeDriverManager().install()),
    options=chrome_prefs
)
browser_client.get("https://google.com")
असल में क्या हो रहा है
जो आउटपुट आप देखते हैं वह एक ही स्ट्रीम नहीं है। इसमें ChromeDriver के प्रोसेस लॉग्स, urllib3, selenium, WDM और webdriver-manager जैसी Python लाइब्रेरियों के लॉग्स, और Chrome का अपना लॉगिंग शामिल है। सिर्फ हेडलैस मोड चालू करने से ड्राइवर चुप नहीं होता, और Python लॉगर्स को म्यूट करने से ड्राइवर प्रोसेस अपना आउटपुट लिखना बंद नहीं करता। इसी वजह से ऐसा लगता है कि एक समय में आप सिर्फ “एक ही चीज़ को काम में ला” पा रहे हैं।
उपाय: हर संदेश स्रोत को अलग‑अलग तरीके से शांत करें
सबसे पहले, ChromeDriver के आउटपुट को OS के null डिवाइस पर रीडायरेक्ट करें ताकि ड्राइवर आपकी कंसोल पर लिखना बंद कर दे। फिर Python पक्ष के लॉगर्स की verbosity कम करें, और Chrome के लॉगिंग लेवल को नीचे करें। इन चरणों को मिलाकर आप हेडलैस रन करा सकते हैं और साथ ही कंसोल को साफ रख सकते हैं।
import os
import sys
import logging
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
chr_flags = webdriver.ChromeOptions()
chr_flags.add_experimental_option("excludeSwitches", ["enable-logging"])  
if not ("-dhl" in sys.argv or "--disable-headless" in sys.argv):
    chr_flags.add_argument("--headless=new")
chr_flags.add_argument("--log-level=3")
svc = Service(
    ChromeDriverManager().install(),
    log_output=os.devnull
)
logging.getLogger("selenium").setLevel(logging.CRITICAL)
logging.getLogger("urllib3").setLevel(logging.CRITICAL)
logging.getLogger("WDM").setLevel(logging.CRITICAL)
logging.getLogger("webdriver_manager").setLevel(logging.CRITICAL)
client = webdriver.Chrome(service=svc, options=chr_flags)
client.get("https://google.com")
यदि आप Python पक्ष पर और कड़े तरीके को तरजीह देते हैं, तो root logger सेट करें ताकि CRITICAL और FATAL से नीचे की हर चीज़ फिल्टर हो जाए:
import logging
logging.getLogger().setLevel(logging.CRITICAL)
ध्यान रहे, “DevTools listening …” जैसी कुछ पंक्तियों को इस समय पूरी तरह दबाना मुश्किल है। यह एक ज्ञात सीमा है।
यह क्यों मायने रखता है
हेडलैस रन CI पाइपलाइनों और सर्वर‑साइड ऑटोमेशन की रीढ़ हैं। साफ‑सुथरे लॉग विफलताओं को स्पष्ट करते हैं, ट्रायेज़ तेज़ करते हैं, और आर्टिफैक्ट्स में शोर घुसने से रोकते हैं। यह समझना कि अलग‑अलग सबसिस्टम स्वतंत्र रूप से आउटपुट बनाते हैं, वह समय बचाता है जिसे आप वरना एक ही फ़्लैग्स को बार‑बार उलटने‑पलटने में लगा देते।
अतिरिक्त नोट्स
अगर आपको और आगे जाना पड़े, तो प्रोसेस स्तर पर stderr को रीडायरेक्ट करना बचे‑खुचे संदेशों को शांत कर सकता है, लेकिन यह आगे चलकर महत्वपूर्ण त्रुटियों को भी छिपा सकता है। सावधानी से इस्तेमाल करें:
import os, sys
sys.stderr = open(os.devnull, "w")
इसके अलावा, यह ध्यान देने योग्य है कि webdriver_manager पुराना हो चुका है और अब समर्थित नहीं है। Selenium ड्राइवरों को डाउनलोड और मैनेज करने के लिए अपना तंत्र देता है, जिसे Selenium Manager कहा जाता है। यह सीधे‑सीधे लॉग्स दबाने से संबंधित नहीं है, लेकिन आगे के लिए अपने सेटअप को बनाए रखने की दिशा में यह बेहतर विकल्प है।
निष्कर्ष
हेडलैस Chrome को चुपचाप चलाने की कुंजी है लॉगिंग को बहु‑स्रोत समस्या की तरह लेना। ChromeDriver का आउटपुट os.devnull की ओर मोड़ें, urllib3, selenium, WDM और webdriver-manager की verbosity घटाएँ, और Chrome की अपनी verbosity कम करें। ये हिस्से व्यवस्थित होने पर हेडलैस निष्पादन और शांत कंसोल अब एक‑दूसरे के विरोधी नहीं रहेंगे।