AI 해결 노트 · 2026-09-17 · 실측 2026-09-17

Playwright "Executable doesn't exist" 오류 — 브라우저 실행 파일이 없을 때 윈도우에서 재현하고 푼 기록

한 줄로

Playwright는 설치된 버전에 맞는 브라우저 번호 폴더(예: chromium_headless_shell-1243)를 찾습니다. 그 폴더가 없으면 Executable doesn't exist로 멈춥니다. npx playwright install chromium으로 받으면 풀리지만, Playwright MCP는 자기 안에 든 다른 Playwright 버전의 번호(chromium-1244)를 찾았습니다. 그래서 MCP 쪽은 오류 문구가 안내한 npx @playwright/mcp install-browser chrome-for-testing을 따로 실행해야 했습니다.

증상

스크립트에서 chromium.launch()를 부르면 이렇게 끝납니다.

browserType.launch: Executable doesn't exist at C:\Users\User\AppData\Local\Temp\longtail_C2\browsers18\chromium_headless_shell-1243\chrome-headless-shell-win64\chrome-headless-shell.exe
╔════════════════════════════════════════════════════════════╗
║ Looks like Playwright was just installed or updated.       ║
║ Please run the following command to download new browsers: ║
║                                                            ║
║     npx playwright install                                 ║
║                                                            ║
║ <3 Playwright Team                                         ║
╚════════════════════════════════════════════════════════════╝

Playwright MCP(--browser chromium)에서 browser_navigate를 부르면 도구 결과가 오류로 돌아옵니다.

### Error
Error: Browser "chrome-for-testing" is not installed; expected executable at C:\Users\User\AppData\Local\Temp\longtail_C2\browsers18\chromium-1244\chrome-win64\chrome.exe. Run `npx @playwright/mcp install-browser chrome-for-testing` to install

둘 다 일부러 만든 상황입니다. PLAYWRIGHT_BROWSERS_PATH를 빈 임시 폴더(browsers18)로 지정해 재현했습니다. 개인 브라우저 캐시(%LOCALAPPDATA%\ms-playwright)는 하위 폴더 이름만 실험 전후로 비교했고 같았습니다(내용은 열지 않음).

실측 환경

항목
OSWindows 11 Home (10.0.26200)
Git Bash (명령 실행·로그)
Node.jsv24.19.0
playwright (임시 폴더에 로컬 설치)Version 1.63.0 (npm view playwright version = 1.63.0)
Playwright MCP@playwright/mcp@latest, 서버가 밝힌 버전 1.64.0-alpha-2026-09-14
브라우저 폴더PLAYWRIGHT_BROWSERS_PATH=C:\Users\User\AppData\Local\Temp\longtail_C2\browsers18 (시작 시 비어 있음)

왜 이러나 — 버전마다 찾는 폴더가 다르다

npm install playwright는 2초 만에 끝났고(added 2 packages), 그 뒤에도 browsers18은 비어 있었습니다. 패키지 설치와 브라우저 설치는 별개였습니다. 어디에 무엇을 받을지는 --dry-run으로 설치 없이 볼 수 있습니다.

PLAYWRIGHT_BROWSERS_PATH='C:/Users/User/AppData/Local/Temp/longtail_C2/browsers18' npx playwright install --dry-run chromium
Chrome for Testing 153.0.8010.12 (playwright chromium v1243)
  Install location:    C:\Users\User\AppData\Local\Temp\longtail_C2\browsers18\chromium-1243
...
Chrome Headless Shell 153.0.8010.12 (playwright chromium-headless-shell v1243)
  Install location:    C:\Users\User\AppData\Local\Temp\longtail_C2\browsers18\chromium_headless_shell-1243

환경변수 없이 같은 --dry-run을 돌리면 설치 위치가 C:\Users\User\AppData\Local\ms-playwright\chromium-1243으로 바뀌었습니다. 이 PC의 그 폴더에는 chromium-1234, chromium_headless_shell-1234는 있었지만 1243번 폴더는 없었습니다. 환경변수 없이 실행했어도 1.63.0은 1243번 폴더를 찾지 못했을 것으로 봅니다(돌려 보지는 않았습니다). 예전에 받아 둔 1234번 폴더는 1.63.0이 찾는 번호와 맞지 않았습니다.

스크립트(1.63.0, 헤드리스)는 chromium_headless_shell-1243을 찾았고, MCP(1.64.0 알파, --headless --browser chromium)는 chromium-1244\chrome-win64\chrome.exe를 찾았습니다. 한 폴더에 두 버전의 브라우저가 따로 필요했습니다.

해결 1 — 스크립트용: npx playwright install chromium

export PLAYWRIGHT_BROWSERS_PATH='C:/Users/User/AppData/Local/Temp/longtail_C2/browsers18'
npx playwright install --no-progress chromium
Chrome for Testing 153.0.8010.12 (playwright chromium v1243) downloaded to C:\Users\User\AppData\Local\Temp\longtail_C2\browsers18\chromium-1243
FFmpeg (playwright ffmpeg v1011) downloaded to C:\Users\User\AppData\Local\Temp\longtail_C2\browsers18\ffmpeg-1011
Chrome Headless Shell 153.0.8010.12 (playwright chromium-headless-shell v1243) downloaded to C:\Users\User\AppData\Local\Temp\longtail_C2\browsers18\chromium_headless_shell-1243
Winldd (playwright winldd v1007) downloaded to C:\Users\User\AppData\Local\Temp\longtail_C2\browsers18\winldd-1007

chromium 하나를 지정해도 네 가지를 받았습니다. 뒤이은 폴더 목록·크기 확인 명령까지 합쳐 30초 걸렸고, 설치 뒤 크기는 이랬습니다(du -sh 기준).

폴더크기
chromium-1243433M
chromium_headless_shell-1243271M
ffmpeg-10113.4M
winldd-1007260K
합계707M (du -sb 739,893,941바이트)

npx playwright install --help에는 --only-shell(헤드리스 셸만)과 --no-shell(헤드리스 셸 제외) 옵션이 있습니다. 헤드리스로만 쓴다면 받는 양을 줄일 수 있어 보이지만, 이번에는 돌려 보지 않았습니다.

같은 스크립트를 다시 돌리자 바로 됐습니다.

PLAYWRIGHT_BROWSERS_PATH= C:\Users\User\AppData\Local\Temp\longtail_C2\browsers18
browser version: 153.0.8010.12
title: longtail C2 18
OK 0.5s

해결 2 — MCP용: 오류 문구가 안내한 명령

1243번을 받은 뒤에도 MCP는 똑같이 chromium-1244가 없다는 오류를 냈습니다. 오류 문구에 적힌 명령을 같은 환경변수로 실행했습니다.

export PLAYWRIGHT_BROWSERS_PATH='C:/Users/User/AppData/Local/Temp/longtail_C2/browsers18'
npx -y @playwright/mcp@latest install-browser --no-progress chrome-for-testing
Chrome for Testing 154.0.8037.0 (playwright chromium v1244) downloaded to C:\Users\User\AppData\Local\Temp\longtail_C2\browsers18\chromium-1244
Chrome Headless Shell 154.0.8037.0 (playwright chromium-headless-shell v1244) downloaded to C:\Users\User\AppData\Local\Temp\longtail_C2\browsers18\chromium_headless_shell-1244

확인 명령까지 합쳐 27초 걸렸고 chromium-1244 435M, chromium_headless_shell-1244 273M가 늘어 폴더 전체가 1.4G가 됐습니다. 표준오류에는 프로젝트 의존성을 먼저 설치하라는 WARNING: It looks like you are running 'npx playwright install' without first installing your project's dependencies. 상자가 찍혔습니다. 확인 명령까지 묶은 전체 종료 코드는 0이었고, 설치 명령 하나만의 종료 코드는 따로 기록하지 않았습니다. install-browser --help를 치면 npx playwright install --help와 같은 도움말이 나왔습니다.

그 뒤 MCP의 browser_navigate는 성공했습니다(Page Title: longtail C2 test page, 확인용 클라이언트가 서버를 띄운 뒤 3.5초). 이미 받아 둔 1243번은 지워지지 않았고, 스크립트도 다시 OK 0.3s로 돌았습니다.

결과

순서실행결과
1스크립트 node launch.js (빈 폴더)종료 코드 1, Executable doesn't exist … chromium_headless_shell-1243 …
2MCP browser_navigate (빈 폴더)isError=true, Browser "chrome-for-testing" is not installed … chromium-1244 …
3npx playwright install --no-progress chromium확인 명령 포함 30초, 707M, 묶음 종료 코드 0
4스크립트 재실행성공, browser version: 153.0.8010.12
5MCP 재실행여전히 chromium-1244 없음 오류
6npx -y @playwright/mcp@latest install-browser --no-progress chrome-for-testing확인 명령 포함 27초, 폴더 합계 1.4G, 묶음 종료 코드 0
7MCP 재실행 / 스크립트 재실행둘 다 성공
8임시 폴더 longtail_C2(1.5G) rm -rf종료 코드 0, 폴더 없음 확인
-%LOCALAPPDATA%\ms-playwright 하위 폴더 이름실험 전, 두 번의 설치 뒤, 임시 폴더 삭제 뒤 모두 같음(내용은 열지 않음)

실패한 것

확인하지 않은 것

함께 보기