安装浏览器驱动

设置您的浏览器用于自动化.

通过WebDriver, Selenium支持市场上所有主要浏览器, 如Chrome、Firefox、Internet Explorer、Edge、Opera和Safari. WebDriver尽量使用浏览器内置的自动化支持 来驱动浏览器.

由于除Internet Explorer之外的所有驱动程序实现 都是由浏览器供应商自己提供的, 因此标准Selenium发行版中不包括这些驱动程序. 本节介绍了使用不同浏览器的基本要求.

在我们的驱动程序配置 文档中 阅读有关启动驱动程序的更多高级选项.

快速参考

浏览器支持的操作系统维护者下载问题追溯
Chromium/ChromeWindows/macOS/LinuxGoogle下载Issues
FirefoxWindows/macOS/LinuxMozilla下载Issues
EdgeWindows/macOSMicrosoft下载Issues
Internet ExplorerWindowsSelenium Project下载Issues
SafarimacOS High Sierra and newerApple内置Issues

注意: Opera驱动程序不支持w3c语法, 因此我们建议使用chromedriver来处理Opera. 请参见打开Opera浏览器的代码示例

使用驱动的三种方式

1. 驱动管理软件

大多数机器会自动更新浏览器, 但驱动程序不会. 为了确保为浏览器提供正确的驱动程序, 这里有许多第三方库可为您提供帮助.

  1. 导入 WebDriver Manager
import io.github.bonigarcia.wdm.WebDriverManager;
  1. 调用 setup() 会自动将正确的浏览器驱动程序 放在代码可以看到的位置:
WebDriverManager.chromedriver().setup();
  1. 只需像平常一样初始化驱动程序:
ChromeDriver driver = new ChromeDriver();
  1. 导入 WebDriver Manager for Python
from webdriver_manager.chrome import ChromeDriverManager
  1. 使用 install() 获取管理器使用的位置, 并将其传递到服务类中
service = Service(executable_path=ChromeDriverManager().install())
  1. 使用 Service 实例并初始化驱动程序:
driver = webdriver.Chrome(service=service)
  1. 导入 WebDriver Manager Package
using WebDriverManager;
using WebDriverManager.DriverConfigs.Impl;
  1. 使用 SetUpDriver() 时需要一个配置类:
new DriverManager().SetUpDriver(new ChromeConfig());
  1. 像往常一样初始化驱动程序:
var driver = new ChromeDriver()
  1. 增加 webdrivers gem 到 Gemfile:
gem 'webdrivers', '~> 5.0'
  1. 在程序中Require webdrivers:
require 'webdrivers'
  1. 像往常一样初始化驱动程序:
driver = Selenium::WebDriver.for :chrome
There is not a recommended driver manager for JavaScript at this time
  1. 导入 WebDriver Manager
import io.github.bonigarcia.wdm.WebDriverManager;
  1. 在初始化驱动程序之前调用setup方法:
fun chrome(): WebDriver {
    WebDriverManager.chromedriver().setup()
    return ChromeDriver()
}

2. PATH 环境变量

此选项首先需要手动下载驱动程序 (有关链接, 请参阅快速参考 部分).

这是一个灵活的选项, 可以在不更新代码的情况下更改驱动程序的位置, 并且可以在多台机器上工作, 而不需要每台机器将驱动程序放在同一位置.

您可以将驱动程序放置在路径中已列出的目录中, 也可以将其放置在目录中并将其添加到PATH.

  • 要查看PATH上已有哪些目录, 请打开命令提示符/终端并键入:

要查看PATH上已经有哪些目录, 请打开Terminal并执行

echo $PATH

如果驱动程序的位置不在列出的目录中, 可以将新目录添加到PATH:

echo 'export PATH=$PATH:/path/to/driver' >> ~/.bash_profile
source ~/.bash_profile

您可以通过启动驱动程序来测试其是否被正确添加:

chromedriver

要查看PATH上已经有哪些目录, 请打开Terminal并执行:

echo $PATH

如果驱动程序的位置不在列出的目录中, 可以将新目录添加到PATH:

echo 'export PATH=$PATH:/path/to/driver' >> ~/.zshenv
source ~/.zshenv

您可以通过启动驱动程序来测试其是否被正确添加:

chromedriver

要查看PATH上已经有哪些目录, 请打开命令提示符并执行:

echo %PATH%

如果驱动程序的位置不在列出的目录中, 可以将新目录添加到PATH:

setx PATH "%PATH%;C:\WebDriver\bin"

您可以通过启动驱动程序来测试其是否被正确添加:

chromedriver.exe

如果PATH配置正确, 您将看到一些与驱动程序启动相关的输出:

Starting ChromeDriver 95.0.4638.54 (d31a821ec901f68d0d34ccdbaea45b4c86ce543e-refs/branch-heads/4638@{#871}) on port 9515
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.

想要重新控制命令提示符可以按下 Ctrl+C

3. 硬编码位置

与上面的选项2类似, 您需要手动下载驱动程序(有关链接, 请参阅快速参考 部分). 在代码中指定位置本身的优点是 不需要指出系统上的环境变量, 但缺点是使代码的灵活性大大降低.

System.setProperty("webdriver.chrome.driver","/path/to/chromedriver");
ChromeDriver driver = new ChromeDriver();
service = Service(executable_path="/path/to/chromedriver")
driver = webdriver.Chrome(service=service)
var driver = new ChromeDriver(@"C:\WebDriver\bin");
service = Selenium::WebDriver::Service.chrome(path: '/path/to/chromedriver')
driver = Selenium::WebDriver.for :chrome, service: service
const {Builder} = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');

const service = new chrome.ServiceBuilder('/path/to/chromedriver');
const driver = new Builder().forBrowser('chrome').setChromeService(service).build();
import org.openqa.selenium.chrome.ChromeDriver

fun main(args: Array<String>) {
    System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver")
    val driver = ChromeDriver()
}

高级配置

有关如何更改驱动程序行为的更多信息, 请参见配置驱动程序参数 页面

下一步

打开和关闭浏览器