Chrome 헤드리스 모드를 사용하면 사람이 없는 환경에서 브라우저를 실행할 수 있습니다. 구현하지 않습니다. 기본적으로 Chrome 없이도 Chrome을 실행할 수 있습니다.
헤드리스 모드는 다음과 같은 프로젝트를 통해 브라우저 자동화에 인기 있는 선택입니다. Puppeteer 또는 ChromeDriver.
헤드리스 모드 사용
헤드리스 모드를 사용하려면 --headless
명령줄 플래그를 전달합니다.
chrome --headless
이전 헤드리스 모드 사용
이전에는 헤드리스 모드가
별도의 대체 브라우저 구현으로
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 원격 디버깅을 통해 연결 헤드리스 타겟으로 전송하고 검사합니다
chrome://inspect
로 이동하여 구성... 버튼을 클릭합니다.- WebSocket URL의 IP 주소와 포트 번호를 입력합니다.
- 이전 예에서는
127.0.0.1:60926
를 입력했습니다.
- 이전 예에서는
- 완료를 클릭합니다. 모든 탭과 함께 원격 타겟이 나타날 것입니다. 목록에 있는 다른 타겟이 있습니다.
- inspect를 클릭하여 Chrome DevTools에 액세스하고 리모컨을 검사합니다. 페이지의 실시간 보기를 비롯한 헤드리스 타겟.
의견
헤드리스 모드에 관한 의견을 기다리겠습니다. 만약 문제가 발생하면 버그를 신고하세요.