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)는 하위 폴더 이름만 실험 전후로 비교했고 같았습니다(내용은 열지 않음).
실측 환경
| 항목 | 값 |
|---|---|
| OS | Windows 11 Home (10.0.26200) |
| 셸 | Git Bash (명령 실행·로그) |
| Node.js | v24.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 chromiumChrome 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 chromiumChrome 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-1007chromium 하나를 지정해도 네 가지를 받았습니다. 뒤이은 폴더 목록·크기 확인 명령까지 합쳐 30초 걸렸고, 설치 뒤 크기는 이랬습니다(du -sh 기준).
| 폴더 | 크기 |
|---|---|
chromium-1243 | 433M |
chromium_headless_shell-1243 | 271M |
ffmpeg-1011 | 3.4M |
winldd-1007 | 260K |
| 합계 | 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-testingChrome 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 … |
| 2 | MCP browser_navigate (빈 폴더) | isError=true, Browser "chrome-for-testing" is not installed … chromium-1244 … |
| 3 | npx playwright install --no-progress chromium | 확인 명령 포함 30초, 707M, 묶음 종료 코드 0 |
| 4 | 스크립트 재실행 | 성공, browser version: 153.0.8010.12 |
| 5 | MCP 재실행 | 여전히 chromium-1244 없음 오류 |
| 6 | npx -y @playwright/mcp@latest install-browser --no-progress chrome-for-testing | 확인 명령 포함 27초, 폴더 합계 1.4G, 묶음 종료 코드 0 |
| 7 | MCP 재실행 / 스크립트 재실행 | 둘 다 성공 |
| 8 | 임시 폴더 longtail_C2(1.5G) rm -rf | 종료 코드 0, 폴더 없음 확인 |
| - | %LOCALAPPDATA%\ms-playwright 하위 폴더 이름 | 실험 전, 두 번의 설치 뒤, 임시 폴더 삭제 뒤 모두 같음(내용은 열지 않음) |
실패한 것
- 순서 1·2와 5는 일부러 만든 실패입니다.
- MCP 경로 첫 재현 두 번은 저희 쪽 실수였습니다. 설정 파일을 만들면서 윈도우 경로의 역슬래시를 잘못 처리해 한 번은 JSON 파싱 오류(
Bad escaped character in JSON)가 났습니다. 다른 한 번은 값이C:UsersUser…처럼 깨졌고, 서버는 그 값을 작업 폴더 기준 상대 경로(…\longtail_C2\mcp18\UsersUser…)로 해석해 오류를 냈습니다. 경로를 슬래시(C:/Users/...)로 쓴 뒤에야 의도한 폴더로 재현됐습니다. 환경변수 값이 이상하면 오류 문구의expected executable at경로부터 보시면 됩니다.
확인하지 않은 것
- 환경변수 없이 기본 위치(
%LOCALAPPDATA%\ms-playwright)로 받는 경우. 개인 캐시를 건드리지 않으려고 하지 않았습니다. --only-shell,--no-shell,--with-deps옵션의 실제 동작.--browser chromium없이 MCP 기본값으로 둔 경우의 브라우저 선택은 Playwright MCP 윈도우 설정에 적었습니다. Chrome이 설치되지 않은 PC에서의 오류 문구는 확인하지 않았습니다.@playwright/test러너(npx playwright test)에서의 오류 모양.- 사내 프록시·방화벽 뒤에서의 다운로드, 맥·리눅스.
- 첫
npx -y @playwright/mcp@latest실행의 패키지 다운로드 시간과 크기.