이전에 selenium 프로젝트를 했다고 안일했었는지 크롤링 프로젝트를 만들고 배포하자마자 오류가 났다.

1
Timed out receiving message from renderer: 600.000

원인이 뭔지 도통 모르겠어서 이것저것 찾아봤는데 결국 해결하긴 했음.

오류 고치는 과정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// Ubuntu 20.04 LTS
// Podman Container Build

// 프로젝트 이미지 생성용 Dockerfile
FROM selenium/node-chrome:123.0.6312.86-chromedriver-123.0.6312.86-20240402
(이후 Node.js 설치 과정)

// 프로젝트 가동 후 셀레늄이 크롬을 띄우는 타이밍에서 타임아웃 메시지 확인
Timed out receiving message from renderer: 600.000

// 혹여 버전이 서로 안맞나 싶어서 컨테이너 내부 sh명령어로 버전 확인
podman exec -it [프로젝트명] sh

google-chrome --version
> Google Chrome 123.0.6312.86

chromedriver --version
> ChromeDriver 123.0.6312.86

// 버전도 맞고 컨테이너 내부에 구글 크롬이 안 깔린것도 아님을 확인

// 구글에 에러 검색/스택오버플로우 탐색. 아래 포스트는 오류 해결에 결정적이었다.
"https://stackoverflow.com/questions/48450594/selenium-timed-out-receiving-message-from-renderer?rq=2"

// 프로젝트에서 셀레늄이 크롬창을 띄우는 옵션 확인 (ts 기준)

let driver: WebDriver
const cOption = new chrome.Options()
cOption.addArguments("--no-sandbox")
.addArguments("--headless") // 인터넷창 안띄우는 옵션 추가
.addArguments("--enable-automation") //오토메이션 켜기
.addArguments("--disable-infobars") //비활성화 옵션 추가
.addArguments("--start-maximized") // 창을 최대로 키우기
.addArguments("--disable-dev-shm-usage")
.addArguments("--single-process")
.addArguments("--incognito") //시크릿 모드
.addArguments("--log-level=off")
.addArguments("--disk-cache-size=zero")
.addArguments("--disable-gpu") // 이것 켜기(로컬에서 이 옵션을 킨 채로 가동하면 오류남)

// 이후 빌드 후 배포했을 때 정상 가동 되었음을 확인함.

추가

1
2
--headless // 실제로 웹 창을 띄움. 페이지에 따라 돔을 못 읽어오기도 함. 우분투처럼 화면이 없는 OS에 배포할 때 이 옵션을 주석처리하면 DevPorts를 찾을 수 없다면서 오류가 떨어짐(송출할 수 있는 화면이 없기 때문)
--disable-gpu // gpu 비활성화 로컬 컴퓨터에서 이 옵션을 켜고 가동할 경우 커넥팅할수 없다는 오류가 나타남

골머리를 좀 많이 앓았는데 그냥 환경 옵션 추가로 해결되었다.

ㅡㅡ;; 오류가 좀더 자세했으면 한다. 셀레늄이 문서화가 많이 안 되어있는 듯.