Fix snap chromium path collapsing to /usr/bin/snap

readlink/realpath of /snap/bin/chromium becomes /usr/bin/snap, which is
not a browser and breaks DrissionPage launch. Keep the snap wrapper path,
reject snap host basenames, and prefer real deb chromium binaries.
This commit is contained in:
chaos committed 2026-07-12 00:49:45 +08:00
1 parent a790a371a8
commit 767516745e
5 files changed
+289 -70

No files matched your search

+22 -2
View File
@@ -69,16 +69,36 @@ def _patched_create_browser_options():
except Exception:
browser_path = None
if not browser_path:
normalize = getattr(reg, "_normalize_browser_path", None)
for cand in (
"/usr/bin/chromium",
"/usr/bin/chromium-browser",
"/snap/bin/chromium",
"/usr/lib/chromium/chromium",
"/snap/bin/chromium", # keep wrapper path; never /usr/bin/snap
"/usr/bin/google-chrome-stable",
"/usr/bin/google-chrome",
):
if os.path.isfile(cand) or os.path.islink(cand):
if callable(normalize):
norm = normalize(cand)
if norm:
browser_path = norm
break
elif os.path.isfile(cand) or os.path.islink(cand):
# refuse snap host binary
if os.path.basename(cand) == "snap":
continue
browser_path = cand
break
# Final sanitize: never pass /usr/bin/snap to DrissionPage
if browser_path and os.path.basename(str(browser_path)) in ("snap", "snap-confine", "snapd"):
print(f"[browser] reject invalid path={browser_path!r}, re-resolve", flush=True)
browser_path = None
resolve = getattr(reg, "resolve_browser_path", None)
if callable(resolve):
try:
browser_path = resolve()
except Exception:
browser_path = None
if browser_path:
try:
opts.set_browser_path(browser_path)