返回博客
如何在Selenium Java中设置代理以进行可扩展的网络爬虫
Sophia Martinez
Specialist in Anti-Bot Strategies
18-Dec-2025
快速浏览
使用 Scrapeless Proxies 提升您的自动化和抓取,快速、可靠且实惠。
将代理集成到您的 Selenium Java 项目中是任何认真进行网络抓取或自动化任务的基本要求。代理允许您隐藏真实的 IP 地址,绕过地理限制,并分配请求以避免速率限制和 IP 禁止。该指南侧重于使用 Java 在 Selenium WebDriver 中配置代理的标准和最有效的方法。
使用 ChromeOptions 配置代理
在 Selenium Java 中设置代理的最常见和可靠的方法是在初始化 WebDriver 之前配置浏览器选项。这涉及创建一个 Proxy 对象并将其传递给 ChromeOptions(或其他浏览器如 Firefox 的等效项)。
Proxy 对象用于定义 HTTP 和 SSL 流量的代理服务器地址。
java
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import io.github.bonigarcia.wdm.WebDriverManager;
public class Scraper {
public static void main(String[] args) {
// 1. 设置 WebDriver(使用 WebDriverManager 以方便)
WebDriverManager.chromedriver().setup();
// 2. 定义代理详细信息(IP:PORT)
String proxyAddress = "184.169.154.119:80";
// 3. 创建 Proxy 对象并设置 HTTP 和 SSL 代理
Proxy proxy = new Proxy();
proxy.setHttpProxy(proxyAddress);
proxy.setSslProxy(proxyAddress);
// 4. 创建 ChromeOptions 实例并设置代理选项
ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);
options.addArguments("--headless=new"); // 可选:以无头模式运行
// 5. 使用配置的选项创建驱动实例
WebDriver driver = new ChromeDriver(options);
// 6. 导航到测试 URL
driver.get("https://httpbin.io/ip");
// ... 其余抓取逻辑
driver.quit();
}
}
在 Java 中实现代理轮换
对于大规模抓取,您必须轮换 IP 地址,以防止您的请求被标记为机器人流量。在 Java 中,通过维护代理列表并在每个新 WebDriver 会话中随机选择一个来实现这一点。这种方法对于分散负载和保持低调非常有效 [3]。
java
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
// ... 其他导入
public class RotatingScraper {
public static void main(String[] args) {
// ... WebDriver 设置
// 1. 定义代理地址列表(IP:PORT)
List<String> proxyList = new ArrayList<>();
proxyList.add("190.61.88.147:8080");
proxyList.add("13.231.166.96:80");
proxyList.add("35.213.91.45:80");
// 2. 随机选择一个代理用于会话
Random rand = new Random();
String proxyAddress = proxyList.get(rand.nextInt(proxyList.size()));
// 3. 使用随机选择的地址配置 Proxy 对象
Proxy proxy = new Proxy();
proxy.setHttpProxy(proxyAddress);
proxy.setSslProxy(proxyAddress);
// 4. 在 ChromeOptions 中设置代理选项
ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);
// ... 其他选项
// 5. 创建驱动实例
WebDriver driver = new ChromeDriver(options);
// ... 抓取逻辑
}
}
处理认证代理
对于需要用户名和密码的高级代理,单独使用标准的 Proxy 对象是不够的。Selenium 不会原生处理浏览器中出现的身份验证弹出窗口。最常见的解决方法包括:
- 使用代理扩展程序: 使用处理代理身份验证的浏览器扩展程序并预先配置凭据。
- 使用代理管理器: 使用代理管理器或网关(如 Scrapeless 提供的)来处理服务器端的身份验证,使您能够使用简单的 IP:PORT 端点连接。
推荐代理解决方案:Scrapeless Proxies
对于专业的基于Java的网页抓取,您的代理网络的质量至关重要。Scrapeless Proxies旨在提供进行大规模Selenium操作所需的速度、可靠性和匿名性。
Scrapeless的**住宅代理**在Selenium Java项目中强烈推荐,因为它们提供的真实IP地址不太可能被复杂的反机器人系统检测和封锁。此外,它们的**静态ISP代理**提供了住宅信任与稳定速度的完美平衡,这对于维护稳定的抓取环境是理想的[4]。使用像Scrapeless这样的服务,您可以确保您的<a href="https://www.scrapeless.com/zh/wiki/scrapeless-browser-full-guide-2026" rel="nofollow">**抓取浏览器**</a>始终使用干净、高声誉的IP地址进行操作。
<div style="padding: 20px 0; text-align: center;">
<a
style="
margin: 8px;
display: inline-block;
text-decoration: none;
"
href="https://www.goproxy.com/register?link=https://app.scrapeless.com/passport/login?utm_source=official&utm_medium=blog&utm_campaign=nebula-proxy"
>
<div
style="
font-weight: bold;
width: 100%;
max-width: 400px;
padding: 12px 40px;
background: #12A594;
border-radius: 5px;
border: 2px solid #12A594;
color: #fff;
cursor: pointer;
box-sizing: border-box;
font-size: 18px;
"
>
免费试用 >
</div>
</a>
</div>
### 常见问题 (FAQ)
**问:我可以使用Java系统属性为Selenium设置代理吗?**
答:虽然您可以设置像`System.setProperty("http.proxyHost", "...")`这样的系统属性,但这仅影响底层Java网络栈,**不**影响由Selenium控制的浏览器。您必须使用`Proxy`对象和`ChromeOptions`来配置浏览器的网络设置[5]。
**问:`Proxy`对象中的HTTP和SSL代理设置有什么区别?**
答:`setHttpProxy()`方法为标准HTTP流量配置代理,而`setSslProxy()`为安全的HTTPS(SSL/TLS)流量配置。最佳实践是将两者都设置为相同的代理地址,以确保所有流量正确路由。
**问:使用代理扩展还是代理管理器进行身份验证更好?**
答:对于大规模、生产级抓取,通常建议使用代理管理器或网关。它将身份验证和轮换逻辑集中在您的Selenium代码之外,使您的抓取脚本更加干净,并且更能抵抗变化[6]。
***
# 参考文献
[1] <a href="https://www.gnu.org/software/wget/manual/html_node/Wgetrc-File.html" rel="nofollow">**GNU Wget手册:Wgetrc文件**</a>
[2] <a href="https://www.geeksforgeeks.org/web-scraping-using-wget/" rel="nofollow">**GeeksforGeeks:使用Wget进行网页抓取**</a>
[3] <a href="https://www.selenium.dev/documentation/webdriver/getting_started/install_libs/" rel="nofollow">**Selenium文档:安装库**</a>
[4] <a href="https://www.oracle.com/java/technologies/javase/proxy.html" rel="nofollow">**Oracle Java网络和代理**</a>
[5] <a href="https://www.baeldung.com/java-selenium-proxy" rel="nofollow">**Baeldung:Java中的Selenium与代理**</a>
[6] <a href="https://www.w3.org/TR/WD-proxy-req" rel="nofollow">**W3C工作草案:代理要求**</a>
[7] <a href="https://www.scrapeless.com/zh/wiki/what-is-headless-browser" rel="nofollow">**Scrapeless Wiki:什么是无头浏览器**</a>
[8] <a href="https://www.scrapeless.com/zh/wiki/best-web-scraping-services-with-the-fastest-headless-browsers" rel="nofollow">**Scrapeless Wiki:最佳网页抓取服务**</a>
[9] <a href="https://www.scrapeless.com/zh/wiki/web-scraping-with-lxml" rel="nofollow">**Scrapeless Wiki:使用LXML进行网页抓取**</a>
[10] <a href="https://www.scrapeless.com/zh/wiki/recommended-free-automated-data-collection-tools" rel="nofollow">**Scrapeless Wiki:推荐的免费自动化数据收集工具**</a>
[11] <a href="https://www.scrapeless.com/zh/wiki/scrapeless-browser-full-guide-2026" rel="nofollow">**Scrapeless Wiki:Scrapeless Browser完整指南**</a>
在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。
最受欢迎的文章
目录



