Selenium中executable_path弃用,如何改用Service类的技术咨询
解决Selenium中executable_path已弃用的问题
问题描述
运行代码时出现如下错误:
DeprecationWarning: executable_path has been deprecated, please pass in a Service object driver = webdriver.Chrome(ChromeDriverManager().install(),options=chrome_options)我知道这个错误是说executable_path被弃用了,但不知道怎么换成Service()类,我Python经验不多,希望得到指导。原代码如下:
from datetime import datetime import csv import unidecode import time from bs4 import BeautifulSoup import requests import os import json from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By def driverInitialize(): chrome_options = webdriver.ChromeOptions() chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_argument("--start-maximized") chrome_options.add_argument("--no-sandbox") #chrome_options.add_argument("--headless") chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument("--disable-notifications") chrome_options.add_argument('--disable-gpu') chrome_options.add_argument("--dns-prefetch-disable") chrome_options.add_argument('ignore-certificate-errors') prefs = {"profile.managed_default_content_settings.images": 2} chrome_options.add_experimental_option("prefs", prefs) driver = webdriver.Chrome(ChromeDriverManager().install(),options=chrome_options) #driver=webdriver.Chrome(options=chrome_options) driver.set_page_load_timeout(300) return driver
解决方法
只需要两步就能搞定:
- 新增Service类的导入:在现有导入代码里加上一行,导入Selenium的Chrome服务类。
- 修改驱动初始化代码:把原来直接传路径的方式,改成用Service对象包装路径后再传入。
修改后的完整代码:
from datetime import datetime import csv import unidecode import time from bs4 import BeautifulSoup import requests import os import json from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By # 新增这行导入Service类 from selenium.webdriver.chrome.service import Service def driverInitialize(): chrome_options = webdriver.ChromeOptions() chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_argument("--start-maximized") chrome_options.add_argument("--no-sandbox") #chrome_options.add_argument("--headless") chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument("--disable-notifications") chrome_options.add_argument('--disable-gpu') chrome_options.add_argument("--dns-prefetch-disable") chrome_options.add_argument('ignore-certificate-errors') prefs = {"profile.managed_default_content_settings.images": 2} chrome_options.add_experimental_option("prefs", prefs) # 先创建Service对象,把ChromeDriver的路径传进去 service = Service(ChromeDriverManager().install()) # 把service和options一起传给Chrome驱动 driver = webdriver.Chrome(service=service, options=chrome_options) driver.set_page_load_timeout(300) return driver
为什么要这么改
Selenium 4之后官方弃用了直接传executable_path的方式,改用Service类来统一管理驱动的启动、停止等生命周期操作,这样代码结构更清晰,也能避免一些潜在的驱动管理问题。你原来用ChromeDriverManager自动下载驱动的逻辑完全不需要变,只是换了个传递路径的方式而已。
内容的提问来源于stack exchange,提问作者Leila
相关产品推荐
相关产品推荐

