बिना ग्राफ़िक यूज़र इंटरफ़ेस वाला Chrome शेल

हेडलेस Chrome शेल Chrome 59 में लॉन्च किया गया था. इसकी मदद से, Chrome ब्राउज़र को बिना डिसप्ले वाले ब्राउज़र एनवायरमेंट में चलाया जा सकता है. इसका मतलब है कि Chrome को, Chrome के बिना चलाया जा सकता है! इसकी मदद से, कमांड लाइन पर Chromium और Blink रेंडरिंग इंजन की वेब प्लैटफ़ॉर्म की सभी आधुनिक सुविधाएं इस्तेमाल की जा सकती हैं.

बिना डिसप्ले वाला ब्राउज़र, ऑटोमेटेड टेस्टिंग और सर्वर एनवायरमेंट के लिए एक बेहतरीन टूल है. इसमें आपको दिखने वाले यूज़र इंटरफ़ेस (यूआई) शेल की ज़रूरत नहीं होती. उदाहरण के लिए, हो सकता है कि आपको किसी असली वेब पेज के ख़िलाफ़ कुछ टेस्ट चलाने हों, उसकी पीडीएफ़ बनानी हो या सिर्फ़ यह देखना हो कि ब्राउज़र किसी यूआरएल को कैसे रेंडर करता है.

हेडलेस मोड (सीएलआई) शुरू करना

कमांड लाइन से Chrome बाइनरी खोलकर, हेडलेस मोड का इस्तेमाल करना शुरू करना सबसे आसान है. अगर आपने Chrome 59 या इसके बाद का वर्शन इंस्टॉल किया है, तो --headless फ़्लैग के साथ Chrome शुरू करें:

chrome \
--headless \                   # Runs Chrome in headless mode.
--disable-gpu \                # Temporarily needed if running on Windows.
--remote-debugging-port=9222 \
https://www.chromestatus.com   # URL to open. Defaults to about:blank.

chrome को Chrome के इंस्टॉलेशन की ओर ले जाना चाहिए. हर प्लैटफ़ॉर्म पर इसकी सटीक जगह अलग-अलग होगी. मैंने Mac पर, Chrome के हर वर्शन के लिए आसान एलियास बनाए हैं जो मेरे डिवाइस पर इंस्टॉल हैं.

अगर Chrome के स्टेबल चैनल का इस्तेमाल किया जा रहा है और बीटा वर्शन नहीं मिल रहा है, तो chrome-canary का इस्तेमाल करें:

alias chrome="/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome"
alias chrome-canary="/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary"
alias chromium="/Applications/Chromium.app/Contents/MacOS/Chromium"

Chrome Canary डाउनलोड करें.

कमांड लाइन की सुविधाएं

कुछ मामलों में, आपको हेडलेस Chrome के लिए प्रोग्राम के हिसाब से स्क्रिप्ट लिखने की ज़रूरत नहीं पड़ सकती. आम टास्क करने के लिए, कमांड लाइन के कुछ काम के फ़्लैग उपलब्ध हैं.

डीओएम प्रिंट करना

--dump-dom फ़्लैग, document.body.innerHTML को stdout पर प्रिंट करता है:

    chrome --headless --disable-gpu --dump-dom https://www.chromestatus.com/


### Create a PDF

The `--print-to-pdf` flag creates a PDF of the page:

```shell
chrome --headless --disable-gpu --print-to-pdf https://www.chromestatus.com/

स्क्रीनशॉट लेना

किसी पेज का स्क्रीनशॉट लेने के लिए, --screenshot फ़्लैग का इस्तेमाल करें:

chrome --headless --disable-gpu --screenshot https://www.chromestatus.com/

# Size of a standard letterhead.
chrome --headless --disable-gpu --screenshot --window-size=1280,1696 https://www.chromestatus.com/

# Nexus 5x
chrome --headless --disable-gpu --screenshot --window-size=412,732 https://www.chromestatus.com/

--screenshot के साथ Chrome चलाने पर, मौजूदा वर्किंग डायरेक्ट्री में screenshot.png नाम की एक फ़ाइल बनेगी. अगर आपको पूरे पेज के स्क्रीनशॉट चाहिए, तो इसके लिए आपको कुछ और काम करने होंगे. डेविड श्नूर का एक बेहतरीन ब्लॉग पोस्ट है, जिसमें इस बारे में जानकारी दी गई है. ज़्यादा जानकारी के लिए, हेडलेस Chrome को ऑटोमेटेड स्क्रीनशॉट टूल के तौर पर इस्तेमाल करना लेख पढ़ें.

REPL मोड (रीड-इवैल-प्रिंट लूप)

--repl फ़्लैग, हेडलेस को ऐसे मोड में चलाता है जहां कमांड लाइन से ही ब्राउज़र में जेएस एक्सप्रेशन का आकलन किया जा सकता है:

$ chrome --headless --disable-gpu --repl --crash-dumps-dir=./tmp https://www.chromestatus.com/
[0608/112805.245285:INFO:headless_shell.cc(278)] Type a Javascript expression to evaluate or "quit" to exit.
>>> location.href
{"result":{"type":"string","value":"https://www.chromestatus.com/features"}}
>>> quit
$

बिना ब्राउज़र यूज़र इंटरफ़ेस (यूआई) के Chrome को डीबग करना?

जब Chrome को --remote-debugging-port=9222 के साथ चलाया जाता है, तो यह DevTools प्रोटोकॉल चालू करके एक इंस्टेंस शुरू करता है. इस प्रोटोकॉल का इस्तेमाल, Chrome के साथ कम्यूनिकेट करने और बिना डिसप्ले वाले ब्राउज़र इंस्टेंस को चलाने के लिए किया जाता है. Sublime, VS Code, और Node जैसे टूल भी किसी ऐप्लिकेशन को रिमोट तरीके से डीबग करने के लिए, इसी प्रोटोकॉल का इस्तेमाल करते हैं. #synergy

पेज देखने के लिए, आपके पास ब्राउज़र यूज़र इंटरफ़ेस (यूआई) नहीं होता. इसलिए, यह देखने के लिए कि सब कुछ ठीक से काम कर रहा है या नहीं, किसी दूसरे ब्राउज़र में http://localhost:9222 पर जाएं. आपको जांच किए जा सकने वाले पेजों की सूची दिखेगी. इस सूची में, क्लिक करके यह देखा जा सकता है कि बिना डिसप्ले वाला ब्राउज़र क्या रेंडर कर रहा है:

DevTools Remote
DevTools को रिमोट तरीके से डीबग करने वाला यूज़र इंटरफ़ेस (यूआई)

यहां से, पेज की जांच करने, उसे डीबग करने, और उसमें बदलाव करने के लिए, DevTools की उन सुविधाओं का इस्तेमाल किया जा सकता है जिनसे आप पहले से परिचित हैं. अगर बिना डिसप्ले वाले ब्राउज़र का इस्तेमाल प्रोग्राम के हिसाब से किया जा रहा है, तो यह पेज, डीबग करने का एक बेहतरीन टूल है. इसकी मदद से, DevTools प्रोटोकॉल के सभी RAW निर्देश देखे जा सकते हैं. ये निर्देश, ब्राउज़र के साथ कम्यूनिकेट करते समय वायर के ज़रिए भेजे जाते हैं.

प्रोग्राम के हिसाब से इस्तेमाल करना (Node)

Puppeteer

Puppeteer, Chrome टीम की बनाई गई Node लाइब्रेरी है. यह हेडलेस (या फ़ुल) Chrome को कंट्रोल करने के लिए, हाई-लेवल एपीआई उपलब्ध कराती है. यह Phantom और NightmareJS जैसी अन्य ऑटोमेटेड टेस्टिंग लाइब्रेरी की तरह है, लेकिन यह सिर्फ़ Chrome के नए वर्शन के साथ काम करती है.

Puppeteer का इस्तेमाल, आसानी से स्क्रीनशॉट लेने, पीडीएफ़ बनाने, पेजों पर नेविगेट करने, और उन पेजों के बारे में जानकारी पाने के लिए किया जा सकता है. अगर आपको ब्राउज़र की टेस्टिंग को तुरंत ऑटोमेट करना है, तो हम इस लाइब्रेरी का सुझाव देते हैं. यह DevTools प्रोटोकॉल की जटिलताओं को छिपाती है और Chrome के डीबग इंस्टेंस को लॉन्च करने जैसे बार-बार किए जाने वाले टास्क को पूरा करती है.

इसे इंस्टॉल करने के लिए, यह कमांड चलाएं:

npm i --save puppeteer

उदाहरण - उपयोगकर्ता एजेंट प्रिंट करना

const puppeteer = require('puppeteer');

(async() => {
  const browser = await puppeteer.launch();
  console.log(await browser.version());
  await browser.close();
})();

उदाहरण - पेज का स्क्रीनशॉट लेना

const puppeteer = require('puppeteer');

(async() => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.chromestatus.com', {waitUntil: 'networkidle2'});
  await page.pdf({path: 'page.pdf', format: 'A4'});

  await browser.close();
})();

पूरे एपीआई के बारे में ज़्यादा जानने के लिए, Puppeteer के दस्तावेज़ देखें.

CRI लाइब्रेरी

chrome-remote-interface Puppeteer के एपीआई की तुलना में लोअर-लेवल लाइब्रेरी है. अगर आपको DevTools प्रोटोकॉल का सीधे इस्तेमाल करना है और close to the metal बनना है, तो हम इसका सुझाव देते हैं.

Chrome लॉन्च करना

chrome-remote-interface, Chrome को लॉन्च नहीं करता. इसलिए, आपको यह काम खुद करना होगा.

सीएलआई सेक्शन में, हमने Chrome को मैन्युअल तरीके से लॉन्च किया था जिसका इस्तेमाल करके --headless --remote-debugging-port=9222. हालांकि, टेस्ट को पूरी तरह से ऑटोमेट करने के लिए, शायद आपको अपने ऐप्लिकेशन से Chrome को लॉन्च करना होगा.

child_process का इस्तेमाल करके, ऐसा किया जा सकता है:

const execFile = require('child_process').execFile;

function launchHeadlessChrome(url, callback) {
  // Assuming MacOSx.
  const CHROME = '/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome';
  execFile(CHROME, ['--headless', '--disable-gpu', '--remote-debugging-port=9222', url], callback);
}

launchHeadlessChrome('https://www.chromestatus.com', (err, stdout, stderr) => {
  ...
});

हालांकि, अगर आपको ऐसा पोर्टेबल सलूशन चाहिए जो कई प्लैटफ़ॉर्म पर काम करे, तो यह तरीका मुश्किल हो सकता है. Chrome के लिए हार्ड-कोड किए गए पाथ को देखें :(

ChromeLauncher का इस्तेमाल करना

Lighthouse, वेब ऐप्लिकेशन की क्वालिटी की जांच करने का एक बेहतरीन टूल है. Lighthouse में, Chrome को लॉन्च करने के लिए एक मज़बूत मॉड्यूल बनाया गया था. अब इसे स्टैंडअलोन इस्तेमाल के लिए एक्सट्रैक्ट कर लिया गया है. chrome-launcher एनपीएम मॉड्यूल Chrome के इंस्टॉल होने की जगह ढूंढता है, डीबग इंस्टेंस सेट अप करता है, ब्राउज़र लॉन्च करता है, और आपका प्रोग्राम पूरा होने पर उसे बंद कर देता है. सबसे अच्छी बात यह है कि यह Node की मदद से, क्रॉस-प्लैटफ़ॉर्म पर काम करता है!

डिफ़ॉल्ट रूप से, chrome-launcher, Chrome Canary को लॉन्च करने की कोशिश करेगा (अगर यह इंस्टॉल है). हालांकि, इसे बदलकर, मैन्युअल तरीके से यह चुना जा सकता है कि कौनसा Chrome इस्तेमाल करना है. इसका इस्तेमाल करने के लिए, सबसे पहले एनपीएम से इसे इंस्टॉल करें:

npm i --save chrome-launcher

उदाहरण - बिना डिसप्ले वाले ब्राउज़र को लॉन्च करने के लिए, chrome-launcher का इस्तेमाल करना

const chromeLauncher = require('chrome-launcher');

// Optional: set logging level of launcher to see its output.
// Install it using: npm i --save lighthouse-logger
// const log = require('lighthouse-logger');
// log.setLevel('info');

/**
 * Launches a debugging instance of Chrome.
 * @param {boolean=} headless True (default) launches Chrome in headless mode.
 *     False launches a full version of Chrome.
 * @return {Promise<ChromeLauncher>}
 */
function launchChrome(headless=true) {
  return chromeLauncher.launch({
    // port: 9222, // Uncomment to force a specific port of your choice.
    chromeFlags: [
      '--window-size=412,732',
      '--disable-gpu',
      headless ? '--headless' : ''
    ]
  });
}

launchChrome().then(chrome => {
  console.log(`Chrome debuggable on port: ${chrome.port}`);
  ...
  // chrome.kill();
});

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

ब्राउज़र को कंट्रोल करने के लिए, हमें DevTools प्रोटोकॉल की ज़रूरत होगी!

पेज के बारे में जानकारी पाना

लाइब्रेरी इंस्टॉल करने के लिए, यह कमांड चलाएं:

npm i --save chrome-remote-interface
उदाहरण

उदाहरण - उपयोगकर्ता एजेंट प्रिंट करना

const CDP = require('chrome-remote-interface');

...

launchChrome().then(async chrome => {
  const version = await CDP.Version({port: chrome.port});
  console.log(version['User-Agent']);
});

इससे, HeadlessChrome/60.0.3082.0 जैसा कुछ नतीजा मिलता है

उदाहरण - यह देखना कि साइट में वेब ऐप्लिकेशन मेनिफ़ेस्ट है या नहीं

const CDP = require('chrome-remote-interface');

...

(async function() {

const chrome = await launchChrome();
const protocol = await CDP({port: chrome.port});

// Extract the DevTools protocol domains we need and enable them.
// See API docs: https://chromedevtools.github.io/devtools-protocol/
const {Page} = protocol;
await Page.enable();

Page.navigate({url: 'https://www.chromestatus.com/'});

// Wait for window.onload before doing stuff.
Page.loadEventFired(async () => {
  const manifest = await Page.getAppManifest();

  if (manifest.url) {
    console.log('Manifest: ' + manifest.url);
    console.log(manifest.data);
  } else {
    console.log('Site has no app manifest');
  }

  protocol.close();
  chrome.kill(); // Kill Chrome.
});

})();

उदाहरण - डीओएम एपीआई का इस्तेमाल करके, पेज का <title> एक्सट्रैक्ट करना.

const CDP = require('chrome-remote-interface');

...

(async function() {

const chrome = await launchChrome();
const protocol = await CDP({port: chrome.port});

// Extract the DevTools protocol domains we need and enable them.
// See API docs: https://chromedevtools.github.io/devtools-protocol/
const {Page, Runtime} = protocol;
await Promise.all([Page.enable(), Runtime.enable()]);

Page.navigate({url: 'https://www.chromestatus.com/'});

// Wait for window.onload before doing stuff.
Page.loadEventFired(async () => {
  const js = "document.querySelector('title').textContent";
  // Evaluate the JS expression in the page.
  const result = await Runtime.evaluate({expression: js});

  console.log('Title of page: ' + result.result.value);

  protocol.close();
  chrome.kill(); // Kill Chrome.
});

})();

Selenium, WebDriver, और ChromeDriver का इस्तेमाल करना

फ़िलहाल, Selenium, Chrome का पूरा इंस्टेंस खोलता है. दूसरे शब्दों में, यह एक ऑटोमेटेड सलूशन है, लेकिन यह पूरी तरह से हेडलेस नहीं है. हालांकि, Selenium को हेडलेस Chrome चलाने के लिए कॉन्फ़िगर किया जा सकता है. अगर आपको खुद सेटअप करने के बारे में पूरी जानकारी चाहिए, तो हमारा सुझाव है कि हेडलेस Chrome के साथ Selenium चलाना लेख पढ़ें. हालांकि, हमने आपकी मदद करने के लिए, यहां कुछ उदाहरण दिए हैं.

ChromeDriver का इस्तेमाल करना

ChromeDriver 2.32 Chrome 61 का इस्तेमाल करता है और यह हेडलेस Chrome के साथ अच्छी तरह काम करता है.

इसे इंस्टॉल करने के लिए, यह कमांड चलाएं:

npm i --save-dev selenium-webdriver chromedriver

उदाहरण:

const fs = require('fs');
const webdriver = require('selenium-webdriver');
const chromedriver = require('chromedriver');

const chromeCapabilities = webdriver.Capabilities.chrome();
chromeCapabilities.set('chromeOptions', {args: ['--headless']});

const driver = new webdriver.Builder()
  .forBrowser('chrome')
  .withCapabilities(chromeCapabilities)
  .build();

// Navigate to google.com, enter a search.
driver.get('https://www.google.com/');
driver.findElement({name: 'q'}).sendKeys('webdriver');
driver.findElement({name: 'btnG'}).click();
driver.wait(webdriver.until.titleIs('webdriver - Google Search'), 1000);

// Take screenshot of results page. Save to disk.
driver.takeScreenshot().then(base64png => {
  fs.writeFileSync('screenshot.png', new Buffer(base64png, 'base64'));
});

driver.quit();

WebDriverIO का इस्तेमाल करना

WebDriverIO, Selenium WebDriver के ऊपर एक हाई-लेवल एपीआई है.

इसे इंस्टॉल करने के लिए, यह कमांड चलाएं:

npm i --save-dev webdriverio chromedriver

उदाहरण: chromestatus.com पर सीएसएस सुविधाओं को फ़िल्टर करना

const webdriverio = require('webdriverio');
const chromedriver = require('chromedriver');

const PORT = 9515;

chromedriver.start([
  '--url-base=wd/hub',
  `--port=${PORT}`,
  '--verbose'
]);

(async () => {

const opts = {
  port: PORT,
  desiredCapabilities: {
    browserName: 'chrome',
    chromeOptions: {args: ['--headless']}
  }
};

const browser = webdriverio.remote(opts).init();

await browser.url('https://www.chromestatus.com/features');

const title = await browser.getTitle();
console.log(`Title: ${title}`);

await browser.waitForText('.num-features', 3000);
let numFeatures = await browser.getText('.num-features');
console.log(`Chrome has ${numFeatures} total features`);

await browser.setValue('input[type="search"]', 'CSS');
console.log('Filtering features...');
await browser.pause(1000);

numFeatures = await browser.getText('.num-features');
console.log(`Chrome has ${numFeatures} CSS features`);

const buffer = await browser.saveScreenshot('screenshot.png');
console.log('Saved screenshot...');

chromedriver.stop();
browser.end();

})();

पुराने हेडलेस Chrome को chrome-headless-shell के तौर पर डाउनलोड करना

Chrome के वर्शन 112 से, Chrome का नया हेडलेस मोड (--headless=new) उपलब्ध है. इस मोड की मदद से, डेवलपर Chrome को अलग बाइनरी के बजाय, बिना किसी यूज़र इंटरफ़ेस (यूआई) के अनअटेंडेड एनवायरमेंट में चला सकते हैं. यह टेस्टिंग और ऑटोमेशन के इस्तेमाल के उदाहरणों के लिए काम का है.

पुराने हेडलेस शेल और नए हेडलेस मोड के लिए, इस्तेमाल के अलग-अलग उदाहरण हैं:

  1. पुराना हेडलेस शेल, Chromium के //content मॉड्यूल के लिए एक हल्का रैपर है. इसलिए, इसमें काफ़ी कम डिपेंडेंसी होती हैं. खास तौर पर, इसके लिए X11/Wayland और D-Bus की ज़रूरत नहीं होती. साथ ही, यह पूरी तरह से काम करने वाले Chrome ब्राउज़र की तुलना में, कुछ मामलों में बेहतर परफ़ॉर्म करता है. इसलिए, यह ऑटोमेटेड स्क्रीनशॉट लेने या वेब स्क्रैपिंग जैसे इस्तेमाल के उदाहरणों के लिए सही है.
  2. दूसरी ओर, नया हेडलेस मोड, असली Chrome ब्राउज़र है. इसलिए, यह ज़्यादा भरोसेमंद है और इसमें ज़्यादा सुविधाएं मिलती हैं. इसलिए, यह वेब ऐप्लिकेशन की एंड-टू-एंड टेस्टिंग या ब्राउज़र एक्सटेंशन की टेस्टिंग के लिए ज़्यादा सही है.

दूसरे शब्दों में, परफ़ॉर्मेंस और भरोसेमंद होने के बीच एक समझौता है. आपके लिए कौनसा हेडलेस मोड सबसे सही है? यह इस बात पर निर्भर करता है कि आपने इसका इस्तेमाल किस काम के लिए करना है.

ऊपर दी गई सूची में मौजूद जानकारी को दिखाने वाला डायग्राम.

डेवलपर और टेस्टर, ऑटोमेशन के इस्तेमाल के उदाहरणों के लिए, Chrome की पूरी सुविधाओं का इस्तेमाल नहीं करना चाहते. ऐसे में, वे पुराना हेडलेस मोड इस्तेमाल कर सकते हैं. हालांकि, नया हेडलेस मोड शायद सबसे अच्छा विकल्प है.

हम यह पक्का करना चाहते हैं कि डेवलपर और टेस्टर के पास इन दोनों विकल्पों में से किसी एक को चुनने का विकल्प बना रहे. इसलिए, हमें यह बताते हुए खुशी हो रही है कि पुराना हेडलेस मोड, अब स्टैंडअलोन chrome-headless-shell बाइनरी के तौर पर उपलब्ध है. chrome-headless-shell की ये नई बाइनरी, Chrome के हर रिलीज़ के लिए जनरेट की जाती हैं. Chrome 120 से, इन्हें Chrome for Testing इन्फ़्रास्ट्रक्चर के ज़रिए डाउनलोड किया जा सकता है.

मैं chrome-headless-shell की बाइनरी कैसे पा सकता/सकती हूं?

Chrome for Testing की अन्य बाइनरी की तरह, अपने प्लैटफ़ॉर्म के लिए chrome-headless-shell डाउनलोड करने का सबसे आसान तरीका है कि हमारी @puppeteer/browsers कमांड-लाइन यूटिलिटी का इस्तेमाल किया जाए, जो npm का इस्तेमाल करके उपलब्ध है. यहां कुछ उदाहरण दिए गए हैं:

# Download the latest available `chrome-headless-shell` binary corresponding to the Stable channel.
npx @puppeteer/browsers install chrome-headless-shell@stable

# Download a specific `chrome-headless-shell` version.
npx @puppeteer/browsers install chrome-headless-shell@120.0.6098.0

अगर आपको chrome-headless-shell की बाइनरी डाउनलोड करने के लिए, अपनी ऑटोमेटेड स्क्रिप्ट बनानी हैं, तो हम आपकी मदद कर सकते हैं. Chrome for Testing, JSON एपीआई एंडपॉइंट उपलब्ध कराता है. इनमें Chrome के रिलीज़ चैनल (स्टेबल, बीटा, डेव, और Canary) के हिसाब से, उपलब्ध नए वर्शन की जानकारी होती है. अपडेट किए गए स्टेटस के बारे में तुरंत खास जानकारी पाने के लिए, Chrome for Testing की उपलब्धता से जुड़े डैशबोर्ड पर जाएं.

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

हमें chrome-headless-shell के बारे में आपके सुझाव/राय या शिकायत का इंतज़ार रहेगा. अगर आपको कोई समस्या होती है, तो बेझिझक उसकी शिकायत करें.

अतिरिक्त संसाधन

यहां कुछ काम के संसाधन दिए गए हैं, जिनसे आपको शुरुआत करने में मदद मिलेगी:

Docs

टूल

  • chrome-remote-interface - नोड मॉड्यूल, जो DevTools प्रोटोकॉल को रैप करता है
  • Lighthouse - वेब ऐप्लिकेशन की क्वालिटी की जांच करने का ऑटोमेटेड टूल. यह प्रोटोकॉल का ज़्यादा इस्तेमाल करता है
  • chrome-launcher - Chrome को लॉन्च करने के लिए नोड मॉड्यूल, जो ऑटोमेशन के लिए तैयार है

डेमो

  • "The Headless Web" - पॉल किनलन का एक बेहतरीन ब्लॉग पोस्ट, जिसमें api.ai के साथ हेडलेस का इस्तेमाल करने के बारे में बताया गया है.

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

क्या मुझे --disable-gpu फ़्लैग की ज़रूरत है?

सिर्फ़ Windows पर. अन्य प्लैटफ़ॉर्म पर इसकी ज़रूरत नहीं है. --disable-gpu फ़्लैग, कुछ बग के लिए एक अस्थायी वर्कअराउंड है. Chrome के आने वाले वर्शन में, इस फ़्लैग की ज़रूरत नहीं होगी. ज़्यादा जानकारी के लिए, crbug.com/737678 पर जाएं.

तो क्या मुझे अब भी Xvfb की ज़रूरत है?

नहीं. हेडलेस Chrome, विंडो का इस्तेमाल नहीं करता. इसलिए, Xvfb जैसे डिसप्ले सर्वर की अब ज़रूरत नहीं है. ऑटोमेटेड टेस्ट को इसके बिना भी चलाया जा सकता है.

Xvfb क्या है? Xvfb, Unix जैसे सिस्टम के लिए इन-मेमोरी डिसप्ले सर्वर है. इसकी मदद से, Chrome जैसे ग्राफ़िकल ऐप्लिकेशन को, फ़िज़िकल डिसप्ले के बिना चलाया जा सकता है. कई लोग, Chrome के पुराने वर्शन को "बिना डिसप्ले वाला ब्राउज़र" टेस्टिंग के लिए चलाने के लिए, Xvfb का इस्तेमाल करते हैं.

मैं हेडलेस Chrome चलाने वाला Docker कंटेनर कैसे बनाऊं?

lighthouse-ci देखें. इसमें एक उदाहरण Dockerfile है, जो node:8-slim को बेस इमेज के तौर पर इस्तेमाल करता है. साथ ही, यह App Engine Flex पर Lighthouse इंस्टॉल और रन करता है .

क्या मैं इसका इस्तेमाल Selenium / WebDriver / ChromeDriver के साथ कर सकता/सकती हूं?

हां. ज़्यादा जानकारी के लिए, Selenium, WebDriver, और ChromeDriver का इस्तेमाल करना लेख पढ़ें.

यह PhantomJS से कैसे जुड़ा है?

हेडलेस Chrome, PhantomJS जैसे टूल की तरह है. इन दोनों का इस्तेमाल, हेडलेस एनवायरमेंट में ऑटोमेटेड टेस्टिंग के लिए किया जा सकता है. इन दोनों में मुख्य अंतर यह है कि Phantom, रेंडरिंग इंजन के तौर पर WebKit के पुराने वर्शन का इस्तेमाल करता है. वहीं, हेडलेस Chrome, Blink के नए वर्शन का इस्तेमाल करता है.

फ़िलहाल, Phantom, DevTools प्रोटोकॉल की तुलना में हाई-लेवल एपीआई भी उपलब्ध कराता है.

मैं बग की शिकायत कहां करूं?

हेडलेस Chrome में मौजूद बग की शिकायतें, crbug.com पर दर्ज करें.

DevTools प्रोटोकॉल में मौजूद बग की शिकायतें, github.com/ChromeDevTools/devtools-protocol पर दर्ज करें.