Chrome 헤드리스 모드

Peter Kvitek
Peter Kvitek

Chrome 헤드리스 모드를 사용하면 사람이 없는 환경에서 브라우저를 실행할 수 있습니다. 구현하지 않습니다. 기본적으로 Chrome 없이도 Chrome을 실행할 수 있습니다.

헤드리스 모드는 다음과 같은 프로젝트를 통해 브라우저 자동화에 인기 있는 선택입니다. Puppeteer 또는 ChromeDriver.

헤드리스 모드 사용

헤드리스 모드를 사용하려면 --headless 명령줄 플래그를 전달합니다.

chrome --headless

이전 헤드리스 모드 사용

이전에는 헤드리스 모드가 별도의 대체 브라우저 구현으로 Chrome 바이너리의 일부로 배송됩니다. 공유되지 않음 Chrome 브라우저 코드를 //chrome

이제 Chrome에서 헤드리스 모드와 헤드풀 모드를 통합했습니다.

헤드리스 모드는 Chrome과 코드를 공유합니다.

현재 이전 헤드리스 모드는 다음에서 계속 사용할 수 있습니다.

chrome --headless=old

Puppeteer에서

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

Selenium-WebDriver에서

Selenium-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/

이는 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이라는 PDF로 저장합니다. 확인할 수 있습니다 예를 들면 다음과 같습니다.

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

필요한 경우 --no-pdf-header-footer 플래그를 추가하여 print를 생략할 수 있습니다. 머리글 (현재 날짜 및 시간 포함)과 바닥글 (URL 및 페이지 포함) 숫자)를 입력합니다.

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초 동안 기다리라고 지시합니다. 있습니다. 따라서 이 프로세스를 실행하는 데 최대 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초 후 페이지에 '1'이 표시됩니다. 2초 후 '2' 등으로 지정합니다. 42초 후 페이지의 상태를 캡처하여 PDF로 저장하는 방법은 다음과 같습니다.

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

디버그

헤드리스 모드에서는 Chrome이 사실상 표시되지 않으므로 어렵게 들릴 수 있습니다. 문제를 해결할 수 있습니다 헤드리스 Chrome을 디버그하는 것은 헤드풀 Chrome과 유사합니다.

다음 명령어를 사용하여 Chrome을 헤드리스 모드로 실행합니다. --remote-debugging-port 명령줄 플래그

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

이렇게 하면 고유한 WebSocket URL이 stdout에 출력됩니다. 예를 들면 다음과 같습니다.

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

헤드풀 Chrome 인스턴스에서는 Chrome DevTools 원격 디버깅을 통해 연결 헤드리스 타겟으로 전송하고 검사합니다

  1. chrome://inspect로 이동하여 구성... 버튼을 클릭합니다.
  2. WebSocket URL의 IP 주소와 포트 번호를 입력합니다.
    • 이전 예에서는 127.0.0.1:60926를 입력했습니다.
  3. 완료를 클릭합니다. 모든 탭과 함께 원격 타겟이 나타날 것입니다. 목록에 있는 다른 타겟이 있습니다.
  4. inspect를 클릭하여 Chrome DevTools에 액세스하고 리모컨을 검사합니다. 페이지의 실시간 보기를 비롯한 헤드리스 타겟.

Chrome DevTools가 원격 헤드리스 대상 페이지를 검사할 수 있음

의견

헤드리스 모드에 관한 의견을 기다리겠습니다. 만약 문제가 발생하면 버그를 신고하세요.