Headless chrome 으로 크롤링(crawling)하기
Chrome 59 부터는 명령행에서 옵션으로 실행할 수 있는 헤드리스 모드가 추가되었습니다. 즉 별도의 GUI 창이 뜨지 않고 사이트에 접속해서 페이지를 받는등의 작업을 실행할 수 있습니다.
헤드리스 크롬을 사용하면 정확히 페이지를 렌더링할 수 있으므로 크롤러 제작이나 업무 자동화시 유용합니다.
크롬 버전과 설치 정보는 URL 에 chrome://version/ 를 입력하면 확인할 수 있습니다.
설치
사용하는 운영체제에 맞는 chrome 을 설치하면 헤드리스 모드를 사용할 수 있으며 리눅스에 설치할 경우 Linux 에 크롬(Chrome) 브라우저 설치하기 를 참고하세요.
alias 등록
설치가 끝났으면 사용하기 쉽도록 초기화 파일에 alias 로 등록해 줍니다.
Linux/OS X 에서는 .bash_profile 이나 .zshrc 에 다음 alias 추가합니다.
alias chrome='google-chrome' alias hchrome='chrome --headless'
Windows 는 PowerShell 에서 다음 function 을 설정해 주면 편리하게 사용할 수 있습니다.
기본 파라미터 설정하는 방법을 몰라서 chrome 만 alias 해서 사용하고 있습니다. 아래 예시에서 hchrome 명령어는 chrome --headless 로 바꿔서 실행하면 됩니다.
Set-Alias chrome "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" function hchrome { chrome --headless $args }
사용
pdf 로 저장
--print-to-pdf 옵션을 사용하면 웹 사이트를 PDF 로 저장할 수 있습니다.
hchrome --print-to-pdf=d:\naver.pdf http://naver.com
Windows 에서는 --print-to-pdf 옵션 뒤에 저장할 파일을 절대 경로로 지정해야 정상 동작합니다.
Windows 에서 headless 모드로 실행시 아무 결과가 안나오면 --enable-logging 옵션을 추가해서 실행해 보면 실행 결과를 알수 있습니다.
hchrome --screenshot https://www.chromestatus.com/ --enable-logging C:\Users\lesstif\ [0420/100443.104:WARNING:headless_browser_main_parts.cc(83)] Cannot create Pref Service with no user data dir. [0420/100445.050:ERROR:headless_shell.cc(592)] Writing to file screenshot.png was unsuccessful, could not open file: FILE_ERROR_ACCESS_DENIED
dom 출력
--dump-dom 옵션을 사용하면 document.body.innerHTML 를 표준 출력(stdout) 에 프린트합니다.
hchrome --dump-dom https://naver.com
screen shot
--screenshot 옵션 뒤에 저장할 파일명을 주면 웹 사이트를 스트린샷으로 만들어서 저장합니다.
hchrome --screenshot https://www.chromestatus.com/
저장된 스크린샷 해상도를 수정할 경우 --window-size 옵션을 지정할 수 있습니다.
# Size of a standard letterhead. hchrome --screenshot=c:/users/lesstif/scr-letter.png --window-size=1280,1696 https://www.chromestatus.com/
# Nexus 5x hchrome --screenshot=c:/users/lesstif/scr-next.png --window-size=412,732 https://www.chromestatus.com/
REPL mode (read-eval-print loop)
run with --repl
flag
$ chrome --headless --disable-gpu --repl --crash-dumps-dir=./tmp https://www.chromestatus.com/