에러 내용
OSError: Chromium downloadable not found at https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/1181205/chrome-win.zip: Received
<?xml version='1.0' encoding='UTF-8'?>
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Details>No such object: chromium-browser-snapshots/Win_x64/1181205/chrome-win.zip</Details>
</Error>.
해결방법
pyppeteer에서 사용하는 값을 변경한다.
설명
문제는 pyppetter에서 존재하지 않는 버전의 크로미움을 다운로드하려고 시도하는 것이다.
문제되는 pyppetter의 코드는 chromium_downloader.py인데, githup에서 확인할 수 있다.
해당 코드를 보면 os.environ에서 PYPPETEER_CHROMIUM_REVISION 값을 가져와서 사용하는데, 해당 값이 설정되지 않았다면 __init__.py에 선언되어있는 __chromium_revision__ 값을 사용한다.
보통 os.envrion을 설정하지 않으므로, __chromium_revision__을 사용하게 된다.
2.0.0 버전을 기준으로 __chromium_revision__ 값은 "1181205"으로 설정되어있는데, 해당 버전을 사용한 다운로드 url을 방문해보면 파일 다운로드 진행되지 않고, 에러 페이지가 노출된다.
https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/1181205/chrome-win.zip
현 시점에서 가장 최신 버전은 1300991이다. 해당 버전을 적용한 url을 방문하면 에러 페이지가 노출되지 않고 파일이 다운로드되는 것을 확인할 수 있다.
https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/1300991/chrome-win.zip
크로미움 최신 버전은 최신 버전 크로미움 다운로드 사이트에서 확인할 수 있다.
에러가 발생하는 이유는 파일을 다운로드할 수 없는 url을 방문하고 있는 것이 문제이므로, 이를 수정해주면 된다.
가장 간단한 방법은 다음과 같이 os.environ에서 유효한 PYPPETEER_CHROMIUM_REVISION 값을 선언해주는 것이다.
import os
os.environ['PYPPETEER_CHROMIUM_REVISION'] = '1300991'
...
import pyppetter
...
당연한 말이지만, os.environ 설정은 pyppetter를 import 하기 전에 진행되어야 한다.