我正在使用 Selenium WebDriver 和 Java 开发一个网页抓取项目。我需要通过需要身份验证的外部代理路由我的网络流量。虽然我可以手动处理身份验证提示并查看反映的代理 IP 地址,但我无法以编程方式实现此目的。
我尝试过的:
直接设置带认证的代理:
proxy.setHttpProxy(proxyAuth + "@" + proxyAddress)
.setSslProxy(proxyAuth + "@" + proxyAddress);
这种方式可以通过认证,但不会将浏览器的IP地址更改为代理IP。
设置代理无需身份验证并手动输入凭据:
proxy.setHttpProxy(proxyAddress)
.setSslProxy(proxyAddress);
当我在浏览器提示中手动输入身份验证凭据时,IP 地址会按预期更改。
代码片段: 这是我的代码示例:
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;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class ProxyExample {
public WebDriver test(String Proxyport) {
Map<String, Object> prefs = new HashMap<>();
ChromeOptions options = new ChromeOptions();
prefs.put("profile.default_content_setting_values.notifications", 2);
options.setExperimentalOption("prefs", prefs);
Proxy proxy = new Proxy();
String proxyAddress = "192.1.1.1:" + Proxyport;
String proxyUsername = "username";
String proxyPassword = "password";
String proxyAuth = proxyUsername + ":" + proxyPassword;
proxy.setProxyType(Proxy.ProxyType.MANUAL);
// Attempt to set proxy with authentication
// proxy.setHttpProxy(proxyAuth + "@" + proxyAddress)
// .setSslProxy(proxyAuth + "@" + proxyAddress);
// Setting proxy without authentication
proxy.setHttpProxy(proxyAddress)
.setSslProxy(proxyAddress);
options.setCapability("proxy", proxy);
WebDriverManager.chromedriver().setup();
options.addArguments("--disable-notifications");
options.addArguments("--disable-blink-features");
options.addArguments("--disable-blink-features=AutomationControlled");
options.addArguments("--remote-allow-origins=*");
options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
options.setExperimentalOption("useAutomationExtension", false);
// Initialize the ChromeDriver with the configured options
WebDriver driver = new ChromeDriver(options);
driver.get("http://example.com"); // Test the proxy setup
return driver;
}
}
如何在 Java Selenium WebDriver 中正确设置具有身份验证的外部代理?在 WebDriver 中处理代理身份验证的正确方法是什么,确保浏览器 IP 地址更改以反映代理 IP?
有什么办法解决这个问题吗?我有完全相同的问题,希望得到一些指导。