Spyder中遇webdrivermanager缺失及chromedriver路径报错求助
Chrome WebDriver 路径错误排查
问题情况
- 在Spyder(基于Anaconda)环境开发时,使用Chrome WebDriver Manager遇到两个连续错误:
- 首次运行测试脚本时,触发
ModuleNotFoundError: No module named 'webdrivermanager' - 调整后再次运行,出现WebDriverException:
'chromedriver' executable needs to be in PATH
- 首次运行测试脚本时,触发
- 已确认终端的PATH环境变量包含
/Users/USERNAME/opt/anaconda/pkgs目录(该目录存放webdriver-manager和selenium包),但报错仍未解决
测试代码
import django, selenium, bs4, requests from selenium import webdriver from selenium.webdriver.chrome.options import Options import socket # There is a 'feature' in selenium which may cause the firewall to react unless you provide an explicit port for the driver def free_port(): free_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) free_socket.bind(('localhost', 0)) free_socket.listen(5) port = free_socket.getsockname()[1] free_socket.close() return port options = Options() options.headless = True options.add_argument('--no-sandbox') driver = webdriver.Chrome(port=free_port(), options=options) driver.get('https://www.google.com') print('Good so far')
报错信息
runfile('/Users/USERNAME/Downloads/sanity.py', wdir='/Users/USERNAME/Downloads') Traceback (most recent call last): File "/Users/USERNAME/opt/anaconda3/lib/python3.8/site-packages/selenium/webdriver/common/service.py", line 72, in start self.process = subprocess.Popen(cmd, env=self.env, File "/Users/USERNAME/opt/anaconda3/lib/python3.8/subprocess.py", line 854, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, File "/Users/USERNAME/opt/anaconda3/lib/python3.8/subprocess.py", line 1702, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'chromedriver' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/USERNAME/Downloads/sanity.py", line 19, in <module> driver = webdriver.Chrome(port=free_port(), options=options) File "/Users/USERNAME/opt/anaconda3/lib/python3.8/site-packages/selenium/webdriver/chrome/webdriver.py", line 73, in __init__ self.service.start() File "/Users/USERNAME/opt/anaconda3/lib/python3.8/site-packages/selenium/webdriver/common/service.py", line 81, in start raise WebDriverException( WebDriverException: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
解决步骤
正确安装webdriver-manager包
注意包名是webdriver-manager(横杠分隔,不是下划线),在Anaconda环境的终端执行:pip install webdriver-manager修改代码,通过webdriver-manager自动管理驱动
原代码直接调用webdriver.Chrome()无法自动找到驱动,需要用webdriver-manager提供的路径。修改后的代码如下:import django, selenium, bs4, requests from selenium import webdriver from selenium.webdriver.chrome.options import Options from webdriver_manager.chrome import ChromeDriverManager # 新增导入 import socket def free_port(): free_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) free_socket.bind(('localhost', 0)) free_socket.listen(5) port = free_socket.getsockname()[1] free_socket.close() return port options = Options() options.headless = True options.add_argument('--no-sandbox') # 自动下载并指定chromedriver路径 driver = webdriver.Chrome( executable_path=ChromeDriverManager().install(), port=free_port(), options=options ) driver.get('https://www.google.com') print('Good so far')关于PATH目录的误区解释
- Anaconda的
pkgs目录是存放Python包的原始压缩包和安装文件的位置,不包含可执行的chromedriver文件,所以即使PATH包含该目录也无法找到驱动 - webdriver-manager会自动下载对应版本的chromedriver到系统临时目录,通过
executable_path参数直接指定路径是最可靠的方式
- Anaconda的
内容的提问来源于stack exchange,提问作者Decoder
相关产品推荐
相关产品推荐

