当前位置: 首页 > 知识库问答 >
问题:

Chrome驱动的C#Selenium代理身份验证

宁侯林
2023-03-14

我使用下面的代码为代理。然而,当chrome启动时,弹出窗口将弹出,程序将被锁定。

public async void StartDriver(string proxy)
    {
        var proxys = new Proxy();
        ChromeDriverService chromeDriverService = ChromeDriverService.CreateDefaultService();
        chromeDriverService.HideCommandPromptWindow = true;
        ChromeOptions chromeOptions = new ChromeOptions();
        bool flag = !string.IsNullOrEmpty(proxy);
        if (flag)
        {
            proxys.Kind = ProxyKind.Manual;
            proxys.IsAutoDetect = false;
            proxys.SslProxy = proxy;
            chromeOptions.Proxy = proxys;
        }
        driver = new ChromeDriver(chromeDriverService, chromeOptions, TimeSpan.FromMinutes(10));
        await Task.Delay(2000);
    }

我尝试了超文本传输协议或ssl...

StartDriver("88.55.66.77:8080");

StartDriver("http://username:pass@88.55.66.77:8080");

我不能启动一个浏览器与一种代理。

我想要一个自动输入用户名和密码的代码。我不想要autoitx3。dll。

有办法启动安全代理吗?

非常感谢。

共有3个答案

柯轶
2023-03-14

Selenium 4有一个bug。执行基本授权期间出现WebSocket异常https://github.com/SeleniumHQ/selenium/issues/10054

帅雅逸
2023-03-14

2021年,您可以使用Selenium 4.0和BiDi API通过授权代理发出请求。示例:

var options = new ChromeOptions {AcceptInsecureCertificates = true};
options.AddArgument("headless");
options.Proxy = new Proxy {HttpProxy = "1.1.1.1:12345", SslProxy = "1.1.1.1:12345", Kind = ProxyKind.Manual};
//options.AddArguments($"--proxy-server=http://1.1.1.1:12345");
var driver = new ChromeDriver(ChromeDriverService.CreateDefaultService(), options, TimeSpan.FromMinutes(2));

NetworkAuthenticationHandler handler = new NetworkAuthenticationHandler()
{
    UriMatcher = d => true, //d.Host.Contains("your-host.com")
    Credentials = new PasswordCredentials("proxy_user", "proxy_pass")
};

var networkInterceptor = driver.Manage().Network;
networkInterceptor.AddAuthenticationHandler(handler);
networkInterceptor.StartMonitoring();

_driver.Navigate().GoToUrl("https://stackoverflow.com/");

networkInterceptor.StopMonitoring();
driver.Quit();

壤驷骁
2023-03-14

有办法启动安全代理吗?

有一个。您需要创建一个带有代理设置的chrome扩展。

manifest.json

    {
        "version": "0.1.0",
        "manifest_version": 2,
        "name": "%NAME IT AS YOU WANT%",
        "permissions": [
            "proxy",
            "tabs",
            "unlimitedStorage",
            "storage",
            "<all_urls>",
            "webRequest",
            "webRequestBlocking"
        ],
        "background": {
            "scripts": ["background.js"]
        },
        "minimum_chrome_version":"22.0.0"
    }

出身背景js

//note that it's a JS code. You can use any additional code to do anything :) 
var config = {
    mode: "fixed_servers",
    rules: {
      singleProxy: {
        scheme: "http",
        host: "%HOST%",
        port: parseInt(%PORT%)
      },
      bypassList: ["foobar.com"]
    }
  };

chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});

function callbackFn(details) {
    return {
        authCredentials: {
            username: "%USERNAME%",
            password: "%PASSWORD%"
        }
    };
}

chrome.webRequest.onAuthRequired.addListener(
        callbackFn,
        {urls: ["<all_urls>"]},
        ['blocking']
);

将其打包为存档。比如你的短信。dat

var proxy = "yourExt.dat";
var options = new ChromeOptions();
options.AddExtension(proxy);
var driver = new ChromeDriver(options);
 类似资料:
  • 我有以下脚本使用python selenium Chrome驱动程序访问网页。 当我尝试运行脚本时,Chrome仍然询问用户名和密码。如何从脚本验证代理服务器?

  • 我有一个HTTP/HTTPS代理,需要使用用户名和密码进行身份验证。我如何使用C#硒铬网络驱动程序做到这一点? options是我分配给驱动程序的ChromeOptions类。

  • 当您在下面的代码中设置代理服务器参数时,如果您的代理服务器需要身份验证,那么FireFox将带来身份验证对话框,基本上您无法自动填写。所以有没有设置用户名和密码? 如果您试图将代理字符串格式化为类似于您得到的错误是字符串无效。所以我想一定有办法做到这一点。 任何帮助都将不胜感激。

  • 我正在尝试使用AutoIT处理Selenium webdriver脚本的基本身份验证弹出。我为Firefox和Internet Explorer写了一个脚本,但它对Chrome不起作用。 当我尝试在Chrome上使用AutoIt窗口信息工具识别身份验证弹出时,结果是空的。我正在使用以下AutoIt脚本: 任何能让它发挥作用的指示都是有帮助的。我没有使用,因为重定向时会出现一些身份验证弹出窗口。

  • 问题内容: Chrome 59 删除了对https:// user:password@example.com URL的支持 。 我有一个正在使用此功能的测试,该功能现已损坏,因此我尝试将其替换为等待身份验证弹出窗口并填写详细信息的版本。但是以下操作在Chrome上不起作用(Chrome不会将auth弹出窗口视为警报): 仅selenium版本具有相同的问题: 我可以在FireFox中看到几种解决方

  • 下面的C#用于打开一个selenium驱动程序,并通过身份验证连接到一个代理。在driver.navigate().gotourl(...)上弹出chrome警报无法通过。这意味着我无法在try{}catch{}中处理警报。 如何对代理进行身份验证? 到目前为止我找到的最接近的一个帖子