로컬에서 헤드리스 브라우저에 직접 연결
예전에는 로컬에서 헤드리스 브라우저를 띄우고 거기에 CDP(Chrome DevTools Protocol)로 연결해서 받아오는 방식이었음
* chromedriver나 firefox webdriver 등
* 이걸 추상화한 게 selenium
node "client"
node headless_chrome
client -> headless_chrome: over CDP\nwebsocket
원격에서 websocket으로 헤드리스 브라우저 드라이버에 연결
조금 더 발전한 이후에는 CDP로 크롬브라우저를 제어하는 드라이버가 나타났고, 이 드라이버에 websocket으로 연결해서 원격 제어가 가능해짐
websocket이 외부로도 확장되어 제공되었다고 볼 수 있음
node client
node driver
node headless_chrome
client -> driver: over websocket
driver -> headless_chrome: over CDP\nwebsocket
docker container의 등장
원격 제어가 가능해지니까 docker container 이미지로 만듬
그런데 헤드리스 브라우저를 기동해보면 container를 privileged mode로 설정하고 보안을 침해하는 어드민 권한을 확보해야 해서 좀 귀찮은 점이 있는데 이걸 container로 만들기 위한 노력들이 결실을 맺음
https://github.com/browserless/browserless
node client
package container {
node driver
node headless_chrome
}
client -> driver: over websocket
driver -> headless_chrome: over CDP\nwebsocket
K8s에 쉽게 설치할 수 있도록 helm chart로 만들어짐
기술이 성숙해지니까 이제는 k8s 위에 올리기 시작했고 현재는 helm chart로 나와 있음
컨테이너의 등장 이후로는 패키징이나 포팅 수준의 기술 발전만 나오고 있음
https://artifacthub.io/packages/search?ts_query_web=browserless&sort=relevance&page=1
node client
node helm_chart
cloud K8s {
package browserless_pod {
node driver
node headless_chrome
}
}
client --> driver: over websocket
driver -> headless_chrome: over CDP\nwebsocket
helm_chart ..> browserless_pod: 설치
현재 상황
- 1,2번에 해당하는 건 언어별로 여러가지 라이브러리들이 제공되고 있음
- javascript 계열의 puppeteer
- python 계열의 playwright, pyppeteer
- java에서는 websocket 응용 개발이 필요할 것으로 보임
- 이제 html과 각종 리소스를 다운로드하고 javascript를 렌더링하는 작업을 위임할 수 있게 되었음
- 응용은 browserless pod에 접속해서 요청만 하면 됨
- 이 과정조차 위 라이브러리들이 편하게 제공해줌
- htmlUnit이 제공하던 오류/경고/디버그 정보와 각 단계별로 소요되던 시간 정보(trace)도 받을 수 있음
- SaaS 서비스 업체도 있음 (browser test automation or crawling service?)