ক্রোম হেডলেস মোড

পিটার Kvitek
Peter Kvitek

ক্রোম হেডলেস মোডের সাহায্যে, আপনি কোনও দৃশ্যমান UI ছাড়াই একটি অনুপস্থিত পরিবেশে ব্রাউজার চালাতে পারেন৷ মূলত, আপনি ক্রোম ছাড়াই ক্রোম চালাতে পারেন।

Puppeteer বা ChromeDriver-এর মতো প্রকল্পগুলির মাধ্যমে ব্রাউজার অটোমেশনের জন্য হেডলেস মোড একটি জনপ্রিয় পছন্দ।

হেডলেস মোড ব্যবহার করুন

হেডলেস মোড ব্যবহার করতে, --headless কমান্ড-লাইন পতাকা পাস করুন:

chrome --headless

পুরানো হেডলেস মোড ব্যবহার করুন

পূর্বে, হেডলেস মোড একটি পৃথক, বিকল্প ব্রাউজার বাস্তবায়ন ছিল যা একই ক্রোম বাইনারির অংশ হিসাবে পাঠানো হয়েছিল। এটি //chrome এ কোনো Chrome ব্রাউজার কোড শেয়ার করেনি।

Chrome এখন একীভূত হেডলেস এবং হেডফুল মোড রয়েছে৷

হেডলেস মোড ক্রোমের সাথে কোড শেয়ার করে।

আপাতত, পুরানো হেডলেস মোড এখনও এর সাথে উপলব্ধ:

chrome --headless=old

পুতুলে

পাপেটিয়ারে হেডলেস মোড ব্যবহার করতে:

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();

সেলেনিয়াম-ওয়েবড্রাইভারে

সেলেনিয়াম-ওয়েবড্রাইভারে হেডলেস মোড ব্যবহার করতে:

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

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

// …

await driver.quit();

অন্যান্য ভাষার বাইন্ডিং ব্যবহার করে উদাহরণ সহ আরও তথ্যের জন্য সেলেনিয়াম দলের ব্লগ পোস্টটি দেখুন।

কমান্ড লাইন পতাকা

নিম্নলিখিত কমান্ড-লাইন পতাকা হেডলেস মোডে উপলব্ধ।

--dump-dom

--dump-dom পতাকা টার্গেট পৃষ্ঠার ক্রমিক DOM কে stdout এ প্রিন্ট করে। যেমন:

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

এটি HTML সোর্স কোড প্রিন্ট করার থেকে আলাদা, যা আপনি curl দিয়ে করতে পারেন। আপনাকে --dump-dom এর আউটপুট আনতে, Chrome প্রথমে HTML কোডকে একটি DOM-এ পার্স করে, DOM-কে পরিবর্তন করতে পারে এমন যেকোনো <script> এক্সিকিউট করে, তারপর সেই 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 নামে একটি পিডিএফ হিসাবে লক্ষ্য পৃষ্ঠাটিকে সংরক্ষণ করে। যেমন:

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

ঐচ্ছিকভাবে, আপনি প্রিন্ট হেডার (বর্তমান তারিখ এবং সময় সহ) এবং পাদচরণ (URL এবং পৃষ্ঠা নম্বর সহ) বাদ দিতে --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 পতাকা ক্রোমকে পিডিএফ প্রিন্ট করার আগে 5 সেকেন্ড পর্যন্ত অপেক্ষা করতে বলে। সুতরাং, এই প্রক্রিয়াটি চালানোর জন্য সর্বাধিক 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 সেকেন্ড পরে পৃষ্ঠার অবস্থা ক্যাপচার করবেন এবং পিডিএফ হিসাবে সংরক্ষণ করবেন তা এখানে:

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

--allow-chrome-scheme-url

chrome:// URL গুলি অ্যাক্সেস করার জন্য --allow-chrome-scheme-url পতাকা প্রয়োজন৷ এই পতাকাটি Chrome 123 থেকে উপলব্ধ। এখানে একটি উদাহরণ দেওয়া হল:

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

ডিবাগ

হেডলেস মোডে ক্রোম কার্যকরভাবে অদৃশ্য হওয়ায় সমস্যা সমাধান করা কঠিন মনে হতে পারে। হেডফুল ক্রোমের মতোই হেডলেস ক্রোমকে এমনভাবে ডিবাগ করা সম্ভব।

--remote-debugging-port কমান্ড-লাইন পতাকা সহ হেডলেস মোডে Chrome লঞ্চ করুন।

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

এটি stdout এ একটি অনন্য WebSocket URL প্রিন্ট করে, উদাহরণস্বরূপ:

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

একটি হেডফুল ক্রোম উদাহরণে, আমরা তখন হেডলেস টার্গেটের সাথে সংযোগ করতে এবং এটি পরিদর্শন করতে Chrome DevTools রিমোট ডিবাগিং ব্যবহার করতে পারি।

  1. chrome://inspect এ যান এবং Configure… বোতামে ক্লিক করুন।
  2. WebSocket URL থেকে IP ঠিকানা এবং পোর্ট নম্বর লিখুন।
    • আগের উদাহরণে, আমি প্রবেশ করেছি 127.0.0.1:60926
  3. সম্পন্ন ক্লিক করুন. আপনি একটি রিমোট টার্গেট দেখতে পাবেন তার সমস্ত ট্যাব এবং তালিকাভুক্ত অন্যান্য টার্গেট সহ।
  4. Chrome DevTools অ্যাক্সেস করতে পরিদর্শনে ক্লিক করুন এবং পৃষ্ঠাটির একটি লাইভ ভিউ সহ দূরবর্তী হেডলেস লক্ষ্য পরিদর্শন করুন৷

Chrome DevTools একটি দূরবর্তী হেডলেস লক্ষ্য পৃষ্ঠা পরিদর্শন করতে পারে

প্রতিক্রিয়া

আমরা হেডলেস মোড সম্পর্কে আপনার প্রতিক্রিয়া শোনার জন্য উন্মুখ। আপনি যদি কোনো সমস্যার সম্মুখীন হন, একটি বাগ ফাইল করুন

,

পিটার Kvitek
Peter Kvitek

ক্রোম হেডলেস মোডের সাহায্যে, আপনি কোনও দৃশ্যমান UI ছাড়াই একটি অনুপস্থিত পরিবেশে ব্রাউজার চালাতে পারেন৷ মূলত, আপনি ক্রোম ছাড়াই ক্রোম চালাতে পারেন।

Puppeteer বা ChromeDriver-এর মতো প্রকল্পগুলির মাধ্যমে ব্রাউজার অটোমেশনের জন্য হেডলেস মোড একটি জনপ্রিয় পছন্দ।

হেডলেস মোড ব্যবহার করুন

হেডলেস মোড ব্যবহার করতে, --headless কমান্ড-লাইন পতাকা পাস করুন:

chrome --headless

পুরানো হেডলেস মোড ব্যবহার করুন

পূর্বে, হেডলেস মোড একটি পৃথক, বিকল্প ব্রাউজার বাস্তবায়ন ছিল যা একই ক্রোম বাইনারির অংশ হিসাবে পাঠানো হয়েছিল। এটি //chrome এ কোনো Chrome ব্রাউজার কোড শেয়ার করেনি।

Chrome এখন একীভূত হেডলেস এবং হেডফুল মোড রয়েছে৷

হেডলেস মোড ক্রোমের সাথে কোড শেয়ার করে।

আপাতত, পুরানো হেডলেস মোড এখনও এর সাথে উপলব্ধ:

chrome --headless=old

পুতুলে

পাপেটিয়ারে হেডলেস মোড ব্যবহার করতে:

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();

সেলেনিয়াম-ওয়েবড্রাইভারে

সেলেনিয়াম-ওয়েবড্রাইভারে হেডলেস মোড ব্যবহার করতে:

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

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

// …

await driver.quit();

অন্যান্য ভাষার বাইন্ডিং ব্যবহার করে উদাহরণ সহ আরও তথ্যের জন্য সেলেনিয়াম দলের ব্লগ পোস্টটি দেখুন।

কমান্ড লাইন পতাকা

নিম্নলিখিত কমান্ড-লাইন পতাকা হেডলেস মোডে উপলব্ধ।

--dump-dom

--dump-dom পতাকা টার্গেট পৃষ্ঠার ক্রমিক DOM কে stdout এ প্রিন্ট করে। যেমন:

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

এটি HTML সোর্স কোড প্রিন্ট করার থেকে আলাদা, যা আপনি curl দিয়ে করতে পারেন। আপনাকে --dump-dom এর আউটপুট আনতে, Chrome প্রথমে HTML কোডকে একটি DOM-এ পার্স করে, DOM-কে পরিবর্তন করতে পারে এমন যেকোনো <script> এক্সিকিউট করে, তারপর সেই 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 নামে একটি পিডিএফ হিসাবে লক্ষ্য পৃষ্ঠাটিকে সংরক্ষণ করে। যেমন:

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

ঐচ্ছিকভাবে, আপনি প্রিন্ট হেডার (বর্তমান তারিখ এবং সময় সহ) এবং পাদচরণ (URL এবং পৃষ্ঠা নম্বর সহ) বাদ দিতে --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 পতাকা ক্রোমকে পিডিএফ প্রিন্ট করার আগে 5 সেকেন্ড পর্যন্ত অপেক্ষা করতে বলে। সুতরাং, এই প্রক্রিয়াটি চালানোর জন্য সর্বাধিক 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 সেকেন্ড পরে পৃষ্ঠার অবস্থা ক্যাপচার করবেন এবং পিডিএফ হিসাবে সংরক্ষণ করবেন তা এখানে:

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

--allow-chrome-scheme-url

chrome:// URL গুলি অ্যাক্সেস করার জন্য --allow-chrome-scheme-url পতাকা প্রয়োজন৷ এই পতাকাটি Chrome 123 থেকে উপলব্ধ। এখানে একটি উদাহরণ দেওয়া হল:

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

ডিবাগ

হেডলেস মোডে ক্রোম কার্যকরভাবে অদৃশ্য হওয়ায় সমস্যা সমাধান করা কঠিন মনে হতে পারে। হেডফুল ক্রোমের মতোই হেডলেস ক্রোমকে এমনভাবে ডিবাগ করা সম্ভব।

--remote-debugging-port কমান্ড-লাইন পতাকা সহ হেডলেস মোডে Chrome লঞ্চ করুন।

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

এটি stdout এ একটি অনন্য WebSocket URL প্রিন্ট করে, উদাহরণস্বরূপ:

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

একটি হেডফুল ক্রোম উদাহরণে, আমরা তখন হেডলেস টার্গেটের সাথে সংযোগ করতে এবং এটি পরিদর্শন করতে Chrome DevTools রিমোট ডিবাগিং ব্যবহার করতে পারি।

  1. chrome://inspect এ যান এবং Configure… বোতামে ক্লিক করুন।
  2. WebSocket URL থেকে IP ঠিকানা এবং পোর্ট নম্বর লিখুন।
    • আগের উদাহরণে, আমি প্রবেশ করেছি 127.0.0.1:60926
  3. সম্পন্ন ক্লিক করুন. আপনি একটি রিমোট টার্গেট দেখতে পাবেন তার সমস্ত ট্যাব এবং তালিকাভুক্ত অন্যান্য টার্গেট সহ।
  4. Chrome DevTools অ্যাক্সেস করতে পরিদর্শনে ক্লিক করুন এবং পৃষ্ঠাটির একটি লাইভ ভিউ সহ দূরবর্তী হেডলেস লক্ষ্য পরিদর্শন করুন৷

Chrome DevTools একটি দূরবর্তী হেডলেস লক্ষ্য পৃষ্ঠা পরিদর্শন করতে পারে

প্রতিক্রিয়া

আমরা হেডলেস মোড সম্পর্কে আপনার প্রতিক্রিয়া শোনার জন্য উন্মুখ। আপনি যদি কোনো সমস্যার সম্মুখীন হন, একটি বাগ ফাইল করুন