Chrome हेडलेस मोड

Peter Kvitek
Peter Kvitek

Chrome हेडलेस मोड की मदद से, ब्राउज़र को ऐसी जगह पर चलाया जा सकता है जिसका इस्तेमाल न हो, बिना किसी यूज़र इंटरफ़ेस (यूआई) के. ज़रूरी है कि आप Chrome के बिना भी Chrome का इस्तेमाल करें.

बिना ग्राफ़िक यूज़र इंटरफ़ेस वाला मोड, ब्राउज़र ऑटोमेशन के लिए लोकप्रिय विकल्प है. यह कई प्रोजेक्ट की मदद से काम करता है Puppeteer या ChromeDriver.

बिना ग्राफ़िक यूज़र इंटरफ़ेस वाला मोड इस्तेमाल करें

हेडलेस मोड का इस्तेमाल करने के लिए, --headless कमांड लाइन फ़्लैग को पास करें:

chrome --headless

बिना ग्राफ़िक यूज़र इंटरफ़ेस वाला पुराना मोड इस्तेमाल करें

पहले, बिना ग्राफ़िक यूज़र इंटरफ़ेस वाला ब्राउज़र मोड था एक अलग, वैकल्पिक ब्राउज़र को लागू करना जो कि उसी Chrome बाइनरी के हिस्से के रूप में शिप किए गए हों. इसने शेयर नहीं किया Chrome ब्राउज़र के किसी भी कोड को //chrome.

Chrome में अब हेडलेस और हेडफ़ुल मोड मिलेंगे.

बिना ग्राफ़िक यूज़र इंटरफ़ेस वाला मोड, Chrome के साथ कोड शेयर करता है.

फ़िलहाल, बिना ग्राफ़िक यूज़र इंटरफ़ेस वाला पुराना मोड, अब भी इनके साथ उपलब्ध है:

chrome --headless=old

इन पपीटीयर

Puppeteer में हेडलेस मोड का इस्तेमाल करने के लिए:

import puppeteer from 'puppeteer';

const browser = await puppeteer.launch({
  headless: 'true', // (default) enables Headless
  // `headless: 'old'` enables old Headless
  // `headless: false` enables "headful" mode
});

const page = await browser.newPage();
await page.goto('https://developer.chrome.com/');

// …

await browser.close();

Celenium-WebDriver में

Celenium-WebDriver में हेडलेस मोड का इस्तेमाल करने के लिए:

const driver = await env
  .builder()
  .setChromeOptions(options.addArguments('--headless'))
  .build();

await driver.get('https://developer.chrome.com/');

// …

await driver.quit();

ज़्यादा जानकारी के लिए, Selenium टीम की ब्लॉग पोस्ट देखें. इसमें, भाषा की अन्य बाइंडिंग के उदाहरण भी शामिल हैं.

कमांड लाइन फ़्लैग

हेडलेस मोड में, यहां दिए गए कमांड लाइन फ़्लैग उपलब्ध हैं.

--dump-dom

--dump-dom फ़्लैग, टारगेट पेज के सीरियल वाले DOM को stdout पर प्रिंट करता है. उदाहरण के लिए:

chrome --headless --dump-dom https://developer.chrome.com/

यह एचटीएमएल सोर्स कोड को प्रिंट करने से अलग है. एचटीएमएल सोर्स कोड का इस्तेमाल किया जा सकता है curl. आपको --dump-dom का आउटपुट देने के लिए, Chrome सबसे पहले एचटीएमएल को पार्स करता है कोड को DOM में बदलकर, किसी भी <script> को एक्ज़ीक्यूट करता है जो DOM को बदल सकता है. उस DOM को वापस HTML की एक सीरियल स्ट्रिंग में बदल देता है.

--screenshot

--screenshot फ़्लैग टारगेट पेज का स्क्रीनशॉट लेता है और उसे इस तरह सेव करता है: screenshot.png मौजूदा डायरेक्ट्री में हैं. यह इन मामलों में खास तौर पर फ़ायदेमंद होता है --window-size फ़्लैग के साथ जोड़ा जा सकता है.

उदाहरण के लिए:

chrome --headless --screenshot --window-size=412,892 https://developer.chrome.com/

--print-to-pdf

--print-to-pdf फ़्लैग, टारगेट पेज को output.pdf नाम के PDF के तौर पर सेव करता है काम कर रही मौजूदा डायरेक्ट्री पर क्लिक करें. उदाहरण के लिए:

chrome --headless --print-to-pdf https://developer.chrome.com/

इसके अलावा, फ़ोटो का प्रिंट हटाने के लिए, --no-pdf-header-footer फ़्लैग भी जोड़ा जा सकता है हेडर (मौजूदा तारीख और समय के साथ) और फ़ुटर (यूआरएल और पेज के साथ) संख्या).

chrome --headless --print-to-pdf --no-pdf-header-footer https://developer.chrome.com/

नहीं: --no-pdf-header-footer फ़्लैग के पीछे की सुविधा पहले थी --print-to-pdf-no-header फ़्लैग के साथ उपलब्ध है. आपको वापस जाना पड़ सकता है अगर पुराने वर्शन का इस्तेमाल किया जा रहा है, तो फ़्लैग का पुराना नाम.

--timeout

--timeout फ़्लैग ज़्यादा से ज़्यादा इंतज़ार के समय (मिलीसेकंड में) के बारे में बताता है, जिसके बाद पेज के कॉन्टेंट को --dump-dom, --screenshot, और --print-to-pdf भले ही पेज अब भी लोड हो रहा हो.

chrome --headless --print-to-pdf --timeout=5000 https://developer.chrome.com/

--timeout=5000 फ़्लैग Chrome को प्रिंट करने से पहले 5 सेकंड तक इंतज़ार करने के लिए कहता है है. इसलिए, इस प्रोसेस को चलने में ज़्यादा से ज़्यादा पांच सेकंड लगते हैं.

--virtual-time-budget

--virtual-time-budget "फ़ास्ट फ़ॉरवर्ड" की तरह काम करता है किसी भी समय-निर्भर कोड के लिए (उदाहरण के लिए, setTimeout/setInterval). यह ब्राउज़र को किसी भी वेब ब्राउज़र पर का उपयोग करके पेज के कोड को जल्द से जल्द पढ़ सकते हैं, ताकि पेज को यह भरोसा हो जाए कि समय बीत चुका है.

इसके इस्तेमाल को समझाने के लिए, इस डेमो पर गौर करें. इसमें हर सेकंड काउंटर को बढ़ाना, लॉग करना, और दिखाना setTimeout(fn, 1000) का इस्तेमाल करके. सही कोड यहां दिया गया है:

<output>0</output>
<script>
  const element = document.querySelector('output');
  let counter = 0;
  setInterval(() => {
    counter++;
    console.log(counter);
    element.textContent = counter;
  }, 1_000);
</script>

एक सेकंड के बाद, पेज में "1" होता है; के बाद दो सेकंड, "2" वगैरह. यहां बताया गया है कि 42 सेकंड के बाद, पेज की स्थिति को कैप्चर करके PDF के तौर पर कैसे सेव किया जाएगा:

chrome --headless --print-to-pdf --virtual-time-budget=42000 https://mathiasbynens.be/demo/time

--allow-chrome-scheme-url

chrome:// यूआरएल को ऐक्सेस करने के लिए, --allow-chrome-scheme-url फ़्लैग की ज़रूरत होती है. यह फ़्लैग Chrome 123 में उपलब्ध है. यहां एक उदाहरण दिया गया है:

chrome --headless --print-to-pdf --allow-chrome-scheme-url chrome://gpu

डीबग

हेडलेस मोड में Chrome दिखता नहीं है. इसलिए, यह थोड़ा मुश्किल लग सकता है का इस्तेमाल करें. बिना ग्राफ़िक यूज़र इंटरफ़ेस वाले Chrome को इस तरह से डीबग किया जा सकता है कि यह हेडफ़ुल Chrome की तरह है.

Chrome को बिना ग्राफ़िक यूज़र इंटरफ़ेस वाले ब्राउज़र मोड में लॉन्च करें --remote-debugging-port कमांड लाइन फ़्लैग.

chrome --headless --remote-debugging-port=0 https://developer.chrome.com/

यह stdout पर एक यूनीक WebSocket यूआरएल प्रिंट करता है, उदाहरण के लिए:

DevTools listening on ws://127.0.0.1:60926/devtools/browser/b4bd6eaa-b7c8-4319-8212-225097472fd9

इसके बाद, हेडफ़ुल Chrome इंस्टेंस में हम कनेक्ट करने के लिए, Chrome DevTools रिमोट डीबगिंग बिना ग्राफ़िक यूज़र इंटरफ़ेस वाले लैंडिंग पेज तक ले जाना है और उसकी जांच करना है.

  1. chrome://inspect पर जाएं और कॉन्फ़िगर करें... बटन पर क्लिक करें.
  2. WebSocket यूआरएल से आईपी पता और पोर्ट नंबर डालें.
    • पिछले उदाहरण में, मैंने 127.0.0.1:60926 डाला था.
  3. हो गया पर क्लिक करें. आपको एक रिमोट टारगेट अपने सभी टैब और अन्य लक्ष्य सूचीबद्ध हैं.
  4. Chrome DevTools को ऐक्सेस करने और रिमोट की जांच करने के लिए, inspect पर क्लिक करें बिना ग्राफ़िक यूज़र इंटरफ़ेस वाला टारगेट, जिसमें पेज का लाइव व्यू भी शामिल है.

Chrome DevTools, रिमोट तौर पर बिना ग्राफ़िक यूज़र इंटरफ़ेस वाले टारगेट पेज की जांच कर सकता है

सुझाव/राय दें या शिकायत करें

हमें हेडलेस मोड के बारे में आपके सुझाव का इंतज़ार रहेगा. अगर आपने कोई समस्या आती है, तो गड़बड़ी की शिकायत करें.