Mac系统下Selenium爬虫chromedriver_mac相对路径配置问题求助
解决Mac上Selenium相对路径调用chromedriver的问题
我太懂这种跨平台路径坑的烦躁了——Windows上跑的好好的代码,到Mac就直接找不到文件,其实核心是路径构建逻辑和Mac特有的权限问题在作祟,咱们一步步搞定它:
问题根源拆解
你之前用os.chdir来回切换目录的方式很容易搞乱脚本的当前工作目录,而且Mac系统下chromedriver需要执行权限,这是Windows不需要的关键步骤,也是你报错的隐形原因之一。
靠谱的相对路径解决方案(不依赖绝对路径)
别再用os.chdir折腾目录了,咱们基于当前Python脚本的位置来构建chromedriver的路径,这样不管谁运行、从哪个目录启动脚本都能精准找到文件。
假设你的Python文件在./src目录下,直接用这段代码:
import os from selenium import webdriver # 如果用的是Selenium 4.x,更推荐用Service类,代码更规范 from selenium.webdriver.chrome.service import Service # 获取当前脚本所在目录的绝对路径(不管脚本从哪启动都能拿到正确路径) current_script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接chromedriver的相对路径:src → 上级目录 → lib → chromedriver_mac # os.path.join会自动适配Mac/Windows的路径分隔符(/或\),不用手动写 chromedriver_path = os.path.join(current_script_dir, "..", "lib", "chromedriver_mac") # 标准化路径,处理掉../这类相对路径标记,避免路径混乱 chromedriver_path = os.path.normpath(chromedriver_path) # 关键!给chromedriver添加执行权限(Mac必须,否则会提示"找不到文件",实际是权限不够) os.chmod(chromedriver_path, 0o755) # Selenium 3.x版本用这行初始化 # browser = webdriver.Chrome(executable_path=chromedriver_path) # Selenium 4.x推荐用Service类初始化 service = Service(chromedriver_path) browser = webdriver.Chrome(service=service)
为什么之前的方法在Mac失效?
- 工作目录混乱:
os.chdir会改变整个脚本的工作目录,如果你的脚本是从./scraper目录启动的,os.chdir("..")会跳转到scraper的上级目录,再os.chdir("lib")可能根本找不到目标文件夹; - 执行权限缺失:Mac系统下下载的chromedriver默认没有执行权限,直接调用会触发“找不到文件”的错误(本质是权限不足无法执行);
- 跨平台路径差异:Windows用
\作为路径分隔符,Mac用/,手动切换目录的方式没考虑这种差异,容易导致路径拼接错误。
额外提醒
- 一定要确保chromedriver版本和你的Chrome浏览器版本完全匹配(比如Chrome是119.x,chromedriver也要对应119.x版本),版本不匹配也会触发类似的报错;
- 就算你的项目用了虚拟环境,这个方法依然有效,因为路径是基于脚本位置构建的,和虚拟环境无关。
内容的提问来源于stack exchange,提问作者burlesquel
相关产品推荐
相关产品推荐

