# X_SCRAPE_BROWSER_MISSING

## Means

there is no browser on this machine for the driver to launch

## Typical cause

**Terminal**, where its sibling `X_SCRAPE_BROWSER_UNREACHABLE` is retryable, and the split is the whole point. A launch that fails because there is no browser binary — or because no `executablePath` was configured, which is every `puppeteer-core` with nothing passed — is a misconfiguration: attempt 2 spawns the same absent path, five times on a five-attempt policy, and on an authenticated target that is five arrivals at a login for no chance of a different answer. Raised by `browserUnreachable()` when the launcher's own words say the browser is absent (`must be specified`, `ENOENT`, `EACCES`, `Could not find Chrome`); everything else stays the retryable transport code

## Fix

`install a Chrome or Chromium and name it — localBrowser({ launcher, executablePath: env.CHROME_PATH }) — or attach to one somebody else is running with remoteBrowser({ cdpUrl: env.SCRAPE_CDP_URL })`

[Scraping](/error-codes#scraping)
