我正在使用 seleniumbase 在 chrome 浏览器中打开 url。我的Python项目位于共享文件夹中,它将在虚拟机上执行。当我想从虚拟环境(位于我提到的共享文件夹上)执行 chromedriver.exe 时,出现以下错误:
Service \[我的共享路径 文件夹].venv\Lib\site-packages\seleniumbase\drivers/chromedriver.exe 没想到退出了。状态代码为:1
我发现 chromedriver 只能在虚拟机的本地文件夹上执行。因此,我找到了解决此问题的方法,即使用虚拟机 C 驱动器中的本地文件夹路径(例如“C:/driver/chromedriver.exe”)。现在我的挑战是如何通过 selenium 基础传递此路径以使用此可执行文件?这是我当前的代码:
from seleniumbase import Driver as sbDriver
def get_with_selenium(url: str,
headless: bool,
user_agents: list,
) -> dict:
user_agent = random.choice(user_agents['agents'])
# Get folder path of the Documents
chromedriver_path = "C:/driver/chromedriver.exe"
driver = sbDriver(
headless=headless,
agent=user_agent,
binary_location=chromedriver_path
)
driver.get(url)
driver.maximize_window()
...
但是,执行此代码后,我收到以下警告,因为提供的路径无效,并且它继续使用默认路径来执行 chromedriver:
Warning: The Chromium binary specified is NOT valid!
Expecting "chromedriver.exe" to be found in ['chrome.exe', 'chromium.exe', 'brave.exe', 'opera.exe
'] for the browser / OS!
(Will use default settings...)
在使用
seleniumbase
时遇到了
chromedriver.exe
路径问题,这是因为误用了
binary_location
参数。
binary_location
参数用于指定
浏览器
的路径,而不是
chromedriver.exe
的路径。
为了在
seleniumbase
中指定
chromedriver.exe
的路径,需要使用
service_args
参数。
以下是修改后的代码:
from seleniumbase import Driver as sbDriver
def get_with_selenium(url: str,
headless: bool,
user_agents: list,
) -> dict:
user_agent = random.choice(user_agents['agents'])
# 指定 chromedriver.exe 的路径
chromedriver_path = "C:/driver/chromedriver.exe"
service_args = ['--webdriver_chrome_driver='+chromedriver_path]
driver = sbDriver(
headless=headless,
agent=user_agent,
service_args=service_args
)
driver.get(url)
driver.maximize_window()
...
在这个修改后的代码中:
-
我们创建了一个名为
service_args
的列表,并将--webdriver_chrome_driver=
和chromedriver_path
拼接成一个字符串,作为列表的唯一元素。 -
我们将
service_args
传递给sbDriver
的service_args
参数。
这样,
seleniumbase
就会使用指定的
chromedriver.exe
路径来启动 Chrome 浏览器。
注意:
-
确保
chromedriver.exe
的版本与使用的 Chrome 浏览器版本兼容。 -
如果在虚拟机上运行代码,请确保虚拟机可以访问
C:/driver/chromedriver.exe
路径,或者将chromedriver.exe
放置在虚拟机可以访问的共享文件夹中,并相应地修改路径。