如何在 Java Selenium WebDriver 中设置具有身份验证的代理?

问题描述 投票:0回答:1

我正在使用 Selenium WebDriver 和 Java 开发一个网页抓取项目。我需要通过需要身份验证的外部代理路由我的网络流量。虽然我可以手动处理身份验证提示并查看反映的代理 IP 地址,但我无法以编程方式实现此目的。

enter image description here

我尝试过的:

直接设置带认证的代理:

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?

java selenium-webdriver webdriver http-proxy
1个回答
0
投票

有什么办法解决这个问题吗?我有完全相同的问题,希望得到一些指导。

© www.soinside.com 2019 - 2024. All rights reserved.