Python:如何为内置的 Selenium Manager 设置自定义 webdriver 下载路径

Python: How to set a custom webdriver download path for the built-in Selenium Manager

提问人:Hemendra 提问时间:8/2/2023 最后编辑:Michael MintzHemendra 更新时间:10/16/2023 访问量:520

问:

如何为内置的Selenium Manager设置自定义Web驱动程序下载路径? 与其他第三方驱动程序管理器不同,可用的文档很少,而且我在任何地方都找不到任何相关讨论。

driver = webdriver.Chrome(options=chrome_options)

WebDriver 对象中是否包含可提取的驱动程序路径数据?<selenium.webdriver.chrome.webdriver.WebDriver (session="8cc15b28be77b3773576ef8b373be420")>

python selenium-webdriver webdriver-manager seleniummanager

评论

0赞 Shawn 8/2/2023
如果这有帮助 - Selenium Manager (Beta)

答:

2赞 Guy 8/2/2023 #1

web驱动程序。Chrome 有一个可选参数service

def __init__(self, options: Options = None, service: Service = None, keep_alive: bool = True):

    service = service if service else Service()
    options = options if options else Options()

    super().__init__(...)

如果是,它会创建一个默认服务None

class Service(service.ChromiumService):

    def __init__(self, executable_path=None, ...):
        super().__init__(executable_path=executable_path, ...)

你可以用你自己的填充它Service

webdriver.Chrome(service=Service(executable_path=driver_executable_path), options=options)

评论

1赞 Hemendra 8/2/2023
谢谢你提供细节,但我在这里问的是别的问题。当您已经在该文件夹中下载了 WebDriver 时,将使用上述参数。我想知道是否有办法告诉Selenium Manager将驱动程序下载目录设置为其他文件夹(可能在项目文件夹内,而不是Users目录中的.cache。作为参考,当我们使用webdriver_manager时,我们可以为argumenet提供所需的下载路径。executable_pathpathchrome_Service(ChromeDriverManager(path = "./Drivers", cache_valid_range=10).install())
0赞 Hemendra 8/2/2023
没关系,我浏览了 selenium 包代码并找到了答案:这为您提供了下载路径from selenium.webdriver.common.driver_finder import DriverFinder chrome_options = Options() driver_path = DriverFinder.get_path(Service(), chrome_options)C:\Users\xxxxxx\.cache\selenium\chromedriver\win64\114.0.5735.90\chromedriver.exe
0赞 Shawn 8/2/2023 #2

如果这就是你要找的!

  • 下面的代码使用 from 类中提供的路径chromedriver.exeService
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

service = Service('C:\Backup\Selenium jars\drivers\chromedriver-win32\chromedriver.exe') # chromedriver.exe path
driver = webdriver.Chrome(service = service)
driver.get("https://www.google.com/")
  • 下面的代码使用chromedriver.exeSeleniumManager
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.google.com/")

SeleniumManager将在以下路径中查找/或下载:chromedriver.exe

enter image description here

0赞 Michael Mintz 8/2/2023 #3

要传入 ,您可以使用 arg。executable_pathservice

以下是 Chrome 的示例:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

service = Service(executable_path="./chromedriver")
options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(service=service, options=options)
# ...
driver.quit()

下面是一个 Firefox 示例:

from selenium import webdriver
from selenium.webdriver.firefox.service import Service

service = Service(executable_path="PATH_TO_GECKODRIVER")
options = webdriver.FirefoxOptions()
driver = webdriver.Firefox(service=service, options=options)
# ...
driver.quit()

您不再需要在 中指定一个完全可操作的 Selenium Manager,因此这就是您所需要的:executable_path4.11.2

from selenium import webdriver
driver = webdriver.Chrome()
# ...
driver.quit()

这是一个带有选项/首选项占位符的占位符:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

service = Service()
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# ...
driver.quit()
0赞 kyrlon 10/16/2023 #4

TL的;DR 答案

将环境变量设置为所需的驱动程序路径:SE_CACHE_PATHos.environ["SE_CACHE_PATH"] = "/path/to/my/drivers/folder"

完整答案

如果要更改 Selenium Manager 下载驱动程序的位置,则需要修改 Selenium Manager 的缓存目录。据我所知,没有什么比这篇文章中提到的 WebDriveManager 更好了,它方便地设置了路径。Selenium Manager 的 rust 可执行文件包装在文件中。更改默认缓存目录的功能是在发布此问题后不久合并的 PR 中请求的。 除了编辑源代码以将 --cache-path 标志添加到后面的变量中之外,目前没有方便的方法可以使用公开的方法/函数更改缓存目录。对于最佳方法,应按如下所示设置环境变量:selenium_manager.pyselenium_manager.pyargsSE_CACHE_PATH

from pathlib import Path
import os
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options

DRIVERS_DIR = Path(__file__).resolve().parent / "drivers"
DRIVERS_DIR.mkdir(exist_ok=True)

os.environ["SE_CACHE_PATH"] = DRIVERS_DIR.name
        
driver = webdriver.Chrome(service=Service())

if __name__ == "__main__":
    driver.get("https://stackoverflow.com/")