"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