"Traceback (most recent call last):
File "/usr/src/main.py", line 29, in <module>
driver = webdriver.Chrome(service=s, options=chrome_options)
File "/usr/local/lib/python3.10/site-packages/selenium/webdriver/chrome/webdriver.py", line 49, in __init__
super().__init__(
File "/usr/local/lib/python3.10/site-packages/selenium/webdriver/chromium/webdriver.py", line 54, in __init__
super().__init__(
File "/usr/local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 206, in __init__
self.start_session(capabilities)
File "/usr/local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 291, in start_session
response = self.execute(Command.NEW_SESSION, caps)["value"]
File "/usr/local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 346, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 245, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally."
python 라이브러리인 selenium을 사용하여 웹 크롤링을 하는 소스코드를 가진 컨테이너 이미지를 google cloud run에서 실행시킬 때 발생한 에러이다.
에러를 읽어보면 chrome이 비정상적으로 종료되었다고 한다.
에러 이유는 sandbox or 제한된 리소스를 가진 환경 때문이다.
linux환경 + docker환경에서 소스코드를 실행하기 때문에 추가 작업을 해줘야 한다. (local + windows에서는 필요없었음)
간단하게 Options() 인스턴스에 필요한 옵션을 추가해주자.
해결방법
chrome_options = Options()
chrome_options.add_argument('--headless')
# 추가
# sandbox 사용안함
chrome_options.add_argument('--no-sandbox')
# 제한된 리소스 문제를 해결하는 옵션
chrome_options.add_argument('--disable-dev-shm-usage')
url = 'target_url'
s = Service(executable_path="/usr/src/chrome/chromedriver")
driver = webdriver.Chrome(service=s, options=chrome_options)
selenium Options() documents 참고
https://github.com/GoogleChrome/chrome-launcher/blob/main/docs/chrome-flags-for-tools.md