繁体   English   中英

C# Selenium - 如何使用带身份验证的代理?

[英]C# Selenium - How to use proxy with Authentication?

我已经苦苦挣扎了两天,找不到解决办法。 我先用 mozilla firefox 试了一下。然后我用 google chrome 试了一下,又出现了同样的错误。 如何为浏览器添加代理功能? 更准确地说,如何通过添加用户属性来运行它?

当涉及到 .networkInterceptor.StartMonitoring()" 代码时,它会卡住。浏览器打开但页面未加载。

如果我在浏览器打开后手动输入链接,则需要用户名和密码。

注意:另外,有不同的方法吗?

版本:Selenium Webdriver 4.0.0

代码:

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Interactions;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

private async void Create()
{
    Proxy proxy = new Proxy();
    var proxyAddress = "host:port";
    proxy.HttpProxy = proxyAddress;
    proxy.SslProxy = proxyAddress;

    ChromeOptions options = new ChromeOptions();
    options.Proxy = proxy;

    IWebDriver driver = new ChromeDriver(options);

    NetworkAuthenticationHandler handler = new NetworkAuthenticationHandler()
    {
        UriMatcher = (d) => true,
        Credentials = new PasswordCredentials("user", "password")
    };

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

    driver.Navigate().GoToUrl("www.google.com");

    await networkInterceptor.StopMonitoring();
}

我认为问题必须变成:为什么 selenium 的方法: await.networkInterceptor.StartMonitoring(); 不适用于 windows forms。发生这种情况是因为 windows forms 是单线程应用程序。 因此,为了使其正常工作,您可以按如下方式调用 create 方法:

//First change your `Create()` method to return a Task instead of void.
private async void button1_Click(object sender, EventArgs e)
{
    await Task.Run(async () =>
    {
        await Create();
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM