使用

geckodriver 是 WebDriver 的一个实现,WebDriver 可以用于各种不同的目的。如何调用 geckodriver 主要取决于您的用例。

在基于容器的软件包中运行 Firefox

当 Firefox 打包在容器内(例如 SnapFlatpak)时,它可能会看到与主机不同的文件系统。这可能会影响对生成的配置文件目录的访问,这可能导致在启动 Firefox 时挂起。

已知这会影响启动 Ubuntu 22.04+ 附带的默认 Firefox。

有几种解决此问题的变通方法可用

  • 不要将基于容器的 Firefox 版本与 geckodriver 一起使用。而是从 https://download.mozilla.org/?product=firefox-latest&os=linux 下载 Firefox 版本,并从 https://github.com/mozilla/geckodriver/releases 下载 geckodriver 版本。

  • 使用与 Firefox 软件包位于同一容器文件系统中的 geckodriver。例如,在 Ubuntu 上,/snap/bin/geckodriver 将与默认 Firefox 配合使用。

  • 设置 --profile-root 命令行选项以将配置文件写入 Firefox 和 geckodriver 都可以访问的目录,例如 $HOME 下的非隐藏目录。

Selenium

如果您通过 Selenium 使用 geckodriver,则必须确保您拥有 3.11 或更高版本。因为 geckodriver 实施了 W3C WebDriver 标准,而不是旧版驱动程序使用的相同 Selenium 线路协议,因此在从 FirefoxDriver 切换到 geckodriver 时,您可能会遇到不兼容性和迁移问题。

一般来说,Selenium 3 将 geckodriver 启用为 Firefox 的默认 WebDriver 实现。随着 Firefox 47 的发布,FirefoxDriver 必须停止使用,因为它缺乏对 Gecko 中新的多进程架构 的支持。

Selenium 客户端绑定将从您的 系统的 PATH 环境变量 中获取 geckodriver 二进制可执行文件,除非您通过设置 webdriver.gecko.driver Java VM 系统属性 来覆盖它。

System.setProperty("webdriver.gecko.driver", "/home/user/bin");

或者通过将其作为标志传递给 java(1) 启动器。

% java -Dwebdriver.gecko.driver=/home/user/bin YourApplication

您使用此方法的效果可能会因您使用的编程语言绑定而异。无论如何,如果 geckodriver 在系统路径上可用,通常都会选择它。在与 bash 兼容的 shell 中,您可以通过导出或设置 PATH 变量来使其他程序知道其位置。

% export PATH=$PATH:/home/user/bin
% whereis geckodriver
geckodriver: /home/user/bin/geckodriver

在 Window 系统上,您可以通过右键单击 **我的电脑** 并选择 **属性** 来更改系统路径。在出现的对话框中,导航到 **高级** → **环境变量** → **路径**。

或在 Windows 控制台窗口中。

% set PATH=%PATH%;C:\bin\geckodriver

独立

由于 geckodriver 是一个独立的 HTTP 服务器,它是 WebDriver 的完整远程端实现,因此如果您没有跨系统矩阵分发进程的要求,则可以避免使用 Selenium 远程服务器。

给定一个符合 W3C WebDriver 的客户端库(或本地端),您可以与 geckodriver HTTP 服务器交互,就像您在与任何 Selenium 服务器对话一样。

使用 curl(1)

% geckodriver &
[1] 16010
% 1491834109194   geckodriver     INFO    Listening on 127.0.0.1:4444
% curl -H 'Content-Type: application/json' -d '{"capabilities": {"alwaysMatch": {"acceptInsecureCerts": true}}}' https://127.0.0.1:4444/session
{"value":{"sessionId":"d4605710-5a4e-4d64-a52a-778bb0c31e00","capabilities":{"acceptInsecureCerts":true,[...]}}}
% curl -H 'Content-Type: application/json' -d '{"url": "https://mozilla.org"}' https://127.0.0.1:4444/session/d4605710-5a4e-4d64-a52a-778bb0c31e00/url
{}
% curl https://127.0.0.1:4444/session/d4605710-5a4e-4d64-a52a-778bb0c31e00/url
{"value":"https://www.mozilla.org/en-US/"
% curl -X DELETE https://127.0.0.1:4444/session/d4605710-5a4e-4d64-a52a-778bb0c31e00
{}
% fg
geckodriver
^C

使用 Python wdclient

import webdriver

with webdriver.Session("127.0.0.1", 4444) as session:
    session.url = "https://mozilla.org"
    print "The current URL is %s" % session.url

并运行

% geckodriver &
[1] 16054
% python example.py
1491835308354   geckodriver     INFO    Listening on 127.0.0.1:4444
The current URL is https://www.mozilla.org/en-US/
% fg
geckodriver
^C