{"record":{"id":"ca1af733e8298d0b","repo":"SeleniumHQ/selenium","slug":"no-chromedriver-download-found-for-platform-linux","errorCode":null,"errorMessage":"No chromedriver download found for platform 'linux64'","messagePattern":"No chromedriver download found for platform 'linux64'","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"scripts/pinned_browsers.py","lineNumber":57,"sourceCode":"        \"GET\",\n        \"https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json\",\n    )\n    versions = json.loads(r.data)[\"versions\"]\n\n    return sorted(\n        filter(lambda v: v[\"version\"].split(\".\")[0] == str(milestone), versions),\n        key=lambda v: parse(v[\"version\"]),\n    )[-1]\n\n\ndef chromedriver(selected_version, workspace_prefix=\"\"):\n    content = \"\"\n\n    drivers = selected_version[\"downloads\"][\"chromedriver\"]\n\n    url = next((d[\"url\"] for d in drivers if d[\"platform\"] == \"linux64\"), None)\n    if url is None:\n        raise ValueError(\"No chromedriver download found for platform 'linux64'\")\n    sha = calculate_hash(url)\n\n    content += f\"\"\"    http_archive(\n        name = \"linux_{workspace_prefix}chromedriver\",\n        url = \"{url}\",\n        sha256 = \"{sha}\",\n        strip_prefix = \"chromedriver-linux64\",\n        build_file_content = \\\"\\\"\\\"\nload(\"@aspect_rules_js//js:defs.bzl\", \"js_library\")\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"chromedriver\"])\n\njs_library(\n    name = \"chromedriver-js\",\n    data = [\"chromedriver\"],\n)\n\\\"\\\"\\\",","sourceCodeStart":39,"sourceCodeEnd":75,"githubUrl":"https://github.com/SeleniumHQ/selenium/blob/aa36b38e696a0909e973bdf5e2f9031ffe842c4b/scripts/pinned_browsers.py#L39-L75","documentation":"Raised by the chromedriver() function in pinned_browsers.py when the selected Chrome version's downloads JSON contains no 'chromedriver' entry with platform 'linux64'. The function iterates selected_version['downloads']['chromedriver'] looking for d['platform'] == 'linux64'. If none matches, url is None and ValueError is raised. This means the Chrome-for-Testing JSON payload did not include a linux64 chromedriver artifact.","triggerScenarios":"Running pinned_browsers.py when Chrome-for-Testing has not yet published a linux64 chromedriver for the latest stable/beta milestone; the JSON schema from googlechromelabs.github.io changed or omitted linux64; the milestone filter selected a version that predates linux64 chromedriver availability.","commonSituations":"Chrome-for-Testing endpoint in flux during a new milestone rollout (linux64 artifact published slightly later than other platforms); API response format changed; beta channel milestone has incomplete artifacts; CI runs during a release window.","solutions":["Retry after a delay — Chrome-for-Testing publishes platform artifacts in waves, linux64 may appear within hours.","Manually check https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json to verify linux64 chromedriver exists for the target milestone.","If the schema changed, update the platform filter or JSON key path in pinned_browsers.py.","Pin to a known-good version by editing the script's version selection logic."],"exampleFix":"null","handlingStrategy":"validation","validationCode":"# Before calling chromedriver(), verify the platform exists in the JSON\ndrivers = selected_version['downloads']['chromedriver']\nplatforms = [d['platform'] for d in drivers]\nif 'linux64' not in platforms:\n    print(f'linux64 not in available platforms: {platforms}')","typeGuard":"null","tryCatchPattern":"null","preventionTips":["Verify the Chrome-for-Testing JSON payload has linux64 artifacts before running the script.","Run the script after a milestone has fully propagated to all platforms.","Handle transient missing-platform cases by retrying later."],"tags":["selenium","build-script","pinned-browsers","chromedriver","linux64","ci"],"backgroundTag":null,"analyzedSha":"aa36b38e696a0909e973bdf5e2f9031ffe842c4b","analyzedAt":"2026-08-14T02:32:32.244Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}