> For the complete documentation index, see [llms.txt](https://developers.oxylabs.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.oxylabs.io/integrations/cn/proxy-integrations/selenium.md).

# Selenium

将 Selenium 与 Oxylabs 代理集成，用于浏览器自动化等功能。带代码示例的 Python 和 Java 设置指南。

[**Selenium**](https://www.selenium.dev/) 是一个可帮助自动化网页浏览器交互，用于网站测试及更多场景的工具。

观看我们的视频指南，或按照以下步骤集成 Selenium [**Python**](#python-setup) 或 [**Java**](#how-to-integrate-proxies-with-selenium-using-java) 搭配以下 Oxylabs 代理：

* **住宅代理和移动代理**
* **数据中心代理**
* **独享数据中心代理（企业版）**
* **独享数据中心代理（自助服务版）**
* **ISP代理**
* **独享ISP代理**

{% embed url="<https://www.youtube.com/watch?v=uh71blwf1l0>" %}

## **Python 设置**

{% stepper %}
{% step %}

### 设置 Selenium

由于使用默认的 Selenium 模块来实现需要身份验证的代理会使整个过程变得复杂，请安装 [**Selenium Wire**](https://github.com/wkeeling/selenium-wire) 以使用……扩展 Selenium 的 Python 绑定 `pip`:

```
pip install selenium-wire
```

此集成另一个推荐的软件包是 `webdriver-manager`。它是一个简化不同浏览器二进制驱动管理的软件包：

```
pip install webdriver-manager
```

{% endstep %}

{% step %}

### Proxy 认证

按以下格式指定你选择的代理端点和账户凭据：

```python
USERNAME = "your_username"
PASSWORD = "your_password"
ENDPOINT = "host:port"
```

然后根据你选择的 Oxylabs 代理类型调整它们的值：

* [住宅代理和移动代理](#residential-and-mobile-proxies)
* [数据中心代理](#datacenter-proxies)
* [独享数据中心代理（企业版）](#dedicated-datacenter-proxies-enterprise)
* [独享数据中心代理（自助服务版）](#dedicated-datacenter-proxies-self-service)
* [ISP代理](#isp-proxies)
* [独享ISP代理](#dedicated-isp-proxies)

#### 住宅代理和移动代理

**主机：** `pr.oxylabs.io`

**端口：** `7777`

**用户名：** `customer-USERNAME`

**密码：** `PASSWORD`

{% hint style="warning" %}
**注意：** 别忘了添加 `customer-` 用户名前缀。
{% endhint %}

你也可以在住宅代理和移动代理中使用额外参数来设置地理位置（国家、州、城市等）并控制会话。请查看 [住宅代理文档](/products/cn/proxies/residential-proxies.md) 以了解更多。

#### 数据中心代理

**主机：** `dc.oxylabs.io`

**端口：** `8001`

**用户名：** `user-username`

**密码：** `password`

{% hint style="warning" %}
**注意：** 别忘了添加 `user-` 用户名前缀。
{% endhint %}

{% tabs %}
{% tab title="按 IP 计费订阅" %}
端口是分配给来自 [代理列表](/products/cn/proxies/datacenter-proxies/proxy-list.md)的 IP 地址的顺序编号。因此，端口 `8001` 将始终使用你列表中的第一个 IP 地址。你也可以通过将端口设置为 [代理 IP 轮换](/products/cn/proxies/datacenter-proxies/ip-control.md) 来启用 `8000`.

此外，你还可以指定 [地理位置](/products/cn/proxies/datacenter-proxies/select-country.md)，例如美国，方法是将 **代理用户名** 设置为 `user-USERNAME-country-US`.
{% endtab %}

{% tab title="按流量计费订阅" %}
该端口 `8001` 会随机选择一个 IP 地址，但在会话期间保持一致。或者，你可以通过使用端口 [轮换代理 IP](/products/cn/proxies/datacenter-proxies/ip-control.md) 来在每个请求中更换 IP `8000`.

如果你想使用特定的 [地理位置](/products/cn/proxies/datacenter-proxies/select-country.md)，例如美国，请将代理用户名设置为 `user-USERNAME-country-US`.
{% endtab %}
{% endtabs %}

#### 独享数据中心代理（企业版）

**主机：** `1.2.3.4` （来自你的 [代理列表](/products/cn/proxies/dedicated-datacenter-proxies/enterprise/proxy-lists.md))

**端口：** `60000` (HTTP), `1180` (SOCKS5)

**用户名：** `username`

**密码：** `password`

对于企业版独享数据中心代理（通过销售团队购买），你需要从已获取的 [代理列表](/products/cn/proxies/dedicated-datacenter-proxies/enterprise/proxy-lists.md).

#### 独享数据中心代理（自助服务版）

**主机：** `ddc.oxylabs.io`

**端口：** `8001`

**用户名：** `user-username`

**密码：** `password`

{% hint style="warning" %}
**注意：** 别忘了添加 `user-` 用户名前缀。
{% endhint %}

对于自助式独享数据中心代理（通过 Oxylabs 仪表盘购买），端口表示从已获取的 [代理列表](/products/cn/proxies/dedicated-datacenter-proxies/self-service/proxy-list.md)的 IP 地址的顺序编号。如果你希望每个请求都获得不同的 IP，请将端口改为 `8000` 以启用 [代理轮换](/products/cn/proxies/dedicated-datacenter-proxies/self-service/proxy-rotation.md).

#### ISP代理

**主机：** `isp.oxylabs.io`

**端口：** `8001`

**用户名：** `user-username`

**密码：** `password`

{% hint style="warning" %}
**注意：** 别忘了添加 `user-` 用户名前缀。
{% endhint %}

对于 ISP 代理，端口会分配给一个特定的 IP 地址及其位置。因此，端口 `8001` 将始终选择你 [代理列表](/products/cn/proxies/isp-proxies/proxy-list.md)的 IP 地址的顺序编号。如果你希望每个请求都获得不同的 IP，请将端口改为 `8000` 以启用 [代理轮换](/products/cn/proxies/isp-proxies/proxy-rotation.md).

#### 独享ISP代理

**主机：** `disp.oxylabs.io`

**端口：** `8001`

**用户名：** `user-username`

**密码：** `password`

{% hint style="warning" %}
**注意：** 别忘了添加 `user-` 用户名前缀。
{% endhint %}

您需要选择分配给所购买的 IP 地址的端口 [代理列表](/products/cn/proxies/dedicated-isp-proxies/self-service/proxy-list.md)，你可以在 Oxylabs 控制面板中找到。 `8001` 端口将为所有请求选取列表中的第一个 IP 地址。使用端口 `8000` 可自动进行 [代理 IP 轮换](/products/cn/proxies/dedicated-isp-proxies/self-service/proxy-rotation.md).
{% endstep %}

{% step %}

### 测试连接

通过访问以下地址检查代理是否正常工作 [**ip.oxylabs.io**](https://ip.oxylabs.io/)。如果一切正常，它将返回你正在使用的代理的 IP 地址。

```python
尝试：
    driver.get("https://ip.oxylabs.io/")
    return f'\nYour IP is: {driver.find_element(By.CSS_SELECTOR, "pre").text}'
finally:
    driver.quit()
```

{% endstep %}

{% step %}

### 代码示例

使用 Selenium 集成 Oxylabs 住宅代理 的完整代码：

```python
from selenium.webdriver.common.by import By
from seleniumwire import webdriver
# A package to have a chromedriver always up-to-date.
from webdriver_manager.chrome import ChromeDriverManager

USERNAME = "your_username"
PASSWORD = "your_password"
ENDPOINT = "pr.oxylabs.io:7777"

def chrome_proxy(user: str, password: str, endpoint: str) -> dict:
    wire_options = {
        "proxy": {
            "http": f"http://{user}:{password}@{endpoint}",
            "https": f"https://{user}:{password}@{endpoint}",
        }
    }

    return wire_options

def execute_driver():
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    代理 = chrome_proxy(USERNAME, PASSWORD, ENDPOINT)
    driver = webdriver.Chrome(
    ChromeDriverManager(driver_version='<VERSION>').install(), options=options, seleniumwire_options=proxies
    )
    尝试：
        driver.get("https://ip.oxylabs.io/")
        return f'\nYour IP is: {driver.find_element(By.CSS_SELECTOR, "pre").text}'
    finally:
        driver.quit()


if __name__ == '__main__':
    print(execute_driver())
```

{% endstep %}
{% endstepper %}

## Java 设置 <a href="#how-to-integrate-proxies-with-selenium-using-java" id="how-to-integrate-proxies-with-selenium-using-java"></a>

### 先决条件

1. **Java 开发工具包 (JDK)：** 8 版或更高（查找最新版本 [此处](https://www.oracle.com/java/technologies/downloads/)).
2. **构建工具：** Apache Maven（可用 [此处](https://www.oracle.com/java/technologies/downloads/)).
3. **Java IDE：** 任何支持 Maven 的 IDE 或 CLI。
4. **浏览器：** 本地安装的 Google Chrome（可用 [此处](https://www.google.com/chrome)).

在添加依赖之前，请先在你首选的 IDE 或 CLI 中初始化一个标准 Maven 项目。安装后，你可以使用以下命令验证 Java 和 Maven 安装：

```
java -version
```

<img src="https://oxylabs.io/oxylabs-web/ZpA8dR5LeNNTxDst_4b72a4dd-3675-4391-b18d-bc2a85414588_java_version.png?auto=format%2Ccompress&#x26;w=3840&#x26;q=75" alt="" height="120" width="681">

```
mvn -v
```

<img src="https://oxylabs.io/oxylabs-web/ZpA8dh5LeNNTxDsu_94c7e32d-acd6-439c-8d60-f047c4de6195_maven_version.png?auto=format%2Ccompress&#x26;w=3840&#x26;q=75" alt="" height="123" width="763">

{% stepper %}
{% step %}

### 创建你的项目

选择“新建项目”，填写所需详细信息，并将构建系统选择为 Maven：

<img src="https://oxylabs.io/oxylabs-web/ZpA8dx5LeNNTxDsv_27754abb-a0c9-40af-ad7a-e82de9505fe6_maven1.png?auto=format%2Ccompress&#x26;w=3840&#x26;q=75" alt="" height="705" width="784">
{% endstep %}

{% step %}

### 添加依赖

将以下依赖添加到你的项目的 `pom.xml` 文件中，以包含 Selenium WebDriver、 [BrowserMob Proxy](https://github.com/lightbody/browsermob-proxy) （用于 HTTP 基本认证），以及 [WebDriverManager](https://github.com/bonigarcia/webdrivermanager):

```xml
<dependencies>
   <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
   <dependency>
       <groupId>org.seleniumhq.selenium</groupId>
       <artifactId>selenium-java</artifactId>
       <version>4.11.0</version>
   </dependency>
   <!-- https://mvnrepository.com/artifact/net.lightbody.bmp/browsermob-core -->
   <dependency>
       <groupId>net.lightbody.bmp</groupId>
       <artifactId>browsermob-core</artifactId>
       <version>2.1.5</version>
   </dependency>
   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
       <version>1.7.32</version>
   </dependency>
   <!-- https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager -->
   <dependency>
       <groupId>io.github.bonigarcia</groupId>
       <artifactId>webdrivermanager</artifactId>
       <version>5.5.2</version>
   </dependency>
   <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
   <dependency>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
       <version>32.1.2-jre</version>
   </dependency>

</dependencies>
```

{% endstep %}

{% step %}

### 添加源代码

从以下位置下载预配置的代理包装类： [Oxylabs Selenium Java 仓库](https://github.com/oxylabs/selenium-proxy-integration-java/tree/main/src/main/java) 并将它们添加到你的项目的 `src/main/java` 目录：

* `ProxySetup.java`：存储你的 Proxy Endpoint 参数和账户凭据。
* `ProxyHelper.java`：管理 `BrowserMobProxyServer` 初始化、基本身份验证以及 `ChromeDriver` 选项。
* `ProxyDemo.java`：包含标准和按国家/地区定向的代理请求的示例执行逻辑。
  {% endstep %}

{% step %}

### 配置代理

打开 `ProxySetup.java` 并根据你选择的 Oxylabs 代理类型更新代理详细信息：

* [住宅代理和移动代理](#residential-and-mobile-proxies-1)
* [数据中心代理](#datacenter-proxies-1)
* [独享数据中心代理（企业版）](#dedicated-datacenter-proxies-enterprise-1)
* [独享数据中心代理（自助服务版）](#dedicated-datacenter-proxies-self-service-1)
* [ISP代理](#isp-proxies-1)
* [独享ISP代理](#dedicated-isp-proxies-1)

#### 住宅代理和移动代理

```java
final class ProxySetup {
    static final String ENDPOINT = "pr.oxylabs.io:7777"; //host:port
    static final String USERNAME = "customer-USERNAME";
    static final String PASSWORD = "PASSWORD";
}
```

**主机：** `pr.oxylabs.io`

**端口：** `7777`

**用户名：** `customer-USERNAME`

**密码：** `PASSWORD`

{% hint style="warning" %}
**注意：** 别忘了添加 `customer-` 用户名前缀。
{% endhint %}

你也可以在住宅代理和移动代理中使用额外参数来设置地理位置（国家、州、城市等）并控制会话。请查看 [住宅代理文档](/products/cn/proxies/residential-proxies.md) 以了解更多。

#### 数据中心代理

```java
final class ProxySetup {
    static final String ENDPOINT = "dc.oxylabs.io:8001"; //host:port
    static final String USERNAME = "user-USERNAME";
    static final String PASSWORD = "PASSWORD";
}
```

**主机：** `dc.oxylabs.io`

**端口：** `8001`

**用户名：** `user-USERNAME`

**密码：** `PASSWORD`

{% hint style="warning" %}
**注意：** 别忘了添加 `user-` 用户名前缀。
{% endhint %}

{% tabs %}
{% tab title="按 IP 计费订阅" %}
端口是分配给来自 [代理列表](/products/cn/proxies/datacenter-proxies/proxy-list.md)的 IP 地址的顺序编号。因此，端口 `8001` 将始终使用你列表中的第一个 IP 地址。你也可以通过将端口设置为 [代理 IP 轮换](/products/cn/proxies/datacenter-proxies/ip-control.md) 来启用 `8000`.

此外，你还可以指定 [地理位置](/products/cn/proxies/datacenter-proxies/select-country.md)，例如美国，方法是将 **代理用户名** 设置为 `user-USERNAME-country-US`.
{% endtab %}

{% tab title="按流量计费订阅" %}
该端口 `8001` 会随机选择一个 IP 地址，但在会话期间保持一致。或者，你可以通过使用端口 [轮换代理 IP](/products/cn/proxies/datacenter-proxies/ip-control.md) 来在每个请求中更换 IP `8000`.

如果你想使用特定的 [地理位置](/products/cn/proxies/datacenter-proxies/select-country.md)，例如美国，请将代理用户名设置为 `user-USERNAME-country-US`.
{% endtab %}
{% endtabs %}

#### 独享数据中心代理（企业版）

```java
final class ProxySetup {
    static final String ENDPOINT = "1.2.3.4:60000"; //host:port
    static final String USERNAME = "USERNAME";
    static final String PASSWORD = "PASSWORD";
}
```

**主机：** `1.2.3.4` （来自你的 [代理列表](/products/cn/proxies/dedicated-datacenter-proxies/enterprise/proxy-lists.md))

**端口：** `60000` (HTTP), `1180` (SOCKS5)

**用户名：** `USERNAME`

**密码：** `PASSWORD`

对于企业版独享数据中心代理（通过销售团队购买），你需要从已获取的 [代理列表](/products/cn/proxies/dedicated-datacenter-proxies/enterprise/proxy-lists.md).

#### 独享数据中心代理（自助服务版）

```java
final class ProxySetup {
    static final String ENDPOINT = "ddc.oxylabs.io:8001"; //host:port
    static final String USERNAME = "user-USERNAME";
    static final String PASSWORD = "PASSWORD";
}
```

**主机：** `ddc.oxylabs.io`

**端口：** `8001`

**用户名：** `user-USERNAME`

**密码：** `PASSWORD`

{% hint style="warning" %}
**注意：** 别忘了添加 `user-` 用户名前缀。
{% endhint %}

对于自助式独享数据中心代理（通过 Oxylabs 仪表盘购买），端口表示从已获取的 [代理列表](/products/cn/proxies/dedicated-datacenter-proxies/self-service/proxy-list.md)的 IP 地址的顺序编号。如果你希望每个请求都获得不同的 IP，请将端口改为 `8000` 以启用 [代理轮换](/products/cn/proxies/dedicated-datacenter-proxies/self-service/proxy-rotation.md).

#### ISP代理

```java
final class ProxySetup {
    static final String ENDPOINT = "isp.oxylabs.io:8001"; //host:port
    static final String USERNAME = "user-USERNAME";
    static final String PASSWORD = "PASSWORD";
}
```

**主机：** `isp.oxylabs.io`

**端口：** `8001`

**用户名：** `user-USERNAME`

**密码：** `PASSWORD`

{% hint style="warning" %}
**注意：** 别忘了添加 `user-` 用户名前缀。
{% endhint %}

对于 ISP 代理，端口会分配给一个特定的 IP 地址及其位置。因此，端口 `8001` 将始终选择你 [代理列表](/products/cn/proxies/isp-proxies/proxy-list.md)的 IP 地址的顺序编号。如果你希望每个请求都获得不同的 IP，请将端口改为 `8000` 以启用 [代理轮换](/products/cn/proxies/isp-proxies/proxy-rotation.md).

#### 独享ISP代理

```java
final class ProxySetup {
    static final String ENDPOINT = "disp.oxylabs.io:8001"; //host:port
    static final String USERNAME = "user-USERNAME";
    static final String PASSWORD = "PASSWORD";
}
```

**主机：** `disp.oxylabs.io`

**端口：** `8001`

**用户名：** `user-USERNAME`

**密码：** `PASSWORD`

{% hint style="warning" %}
**注意：** 别忘了添加 `user-` 用户名前缀。
{% endhint %}

您需要选择分配给所购买的 IP 地址的端口 [代理列表](/products/cn/proxies/dedicated-isp-proxies/self-service/proxy-list.md)，你可以在 Oxylabs 控制面板中找到。 `8001` 端口将为所有请求选取列表中的第一个 IP 地址。使用端口 `8000` 可自动进行 [代理 IP 轮换](/products/cn/proxies/dedicated-isp-proxies/self-service/proxy-rotation.md).
{% endstep %}

{% step %}

### 执行集成脚本

执行 `ProxyDemo.java` 直接在你的 IDE 中执行，或通过终端使用 Maven 编译并运行打包好的 JAR 文件：

```
mvn clean package
java -cp target/oxylabs-selenium-jar-with-dependencies.jar ProxyDemo
```

执行后， `ProxyDemo` 初始化驱动，通过 BrowserMob 将流量路由到指定的 Oxylabs 端点，并打印解析出的出口 IP 地址。

不过，你可能需要安装正确的证书以启用 SSL 支持，并避免下一步中介绍的与证书相关的警告。
{% endstep %}

{% step %}

### SSL 证书处理（可选）

该代码使用 BrowserMob Proxy，支持完整的 MITM。不过，你仍可能看到无效证书警告。

#### 程序化绕过（推荐）

传递 `--ignore-certificate-errors` 通过 `ChromeOptions` 在 `ProxyHelper.java` 以在自动化执行期间绕过 SSL 验证。

#### 根证书安装

导入 BrowserMob 根证书（[ca-certificate-rsa.cer](https://github.com/oxylabs/selenium-proxy-integration-java/blob/main/certificates/ca-certificate-rsa.cer)）到操作系统的信任存储中

* **macOS：** 拖动 `ca-certificate-rsa.cer` 到 *钥匙串访问* > *系统* > *证书*，右键单击，然后选择 *始终信任*.
* **Windows：** 双击 `ca-certificate-rsa.cer`下，选择 *安装证书*，并将导入目标设置为 *受信任的根证书颁发机构*.
  {% endstep %}
  {% endstepper %}

如果您想进一步了解使用 Selenium 进行网络抓取，请阅读我们的 [**博客文章**](https://oxylabs.io/blog/selenium-web-scraping).

查找原始的 Selenium 集成博客文章 [此处](https://oxylabs.io/resources/integrations/selenium).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developers.oxylabs.io/integrations/cn/proxy-integrations/selenium.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
