繁体   English   中英

具有代理身份验证的 Selenium 无头 chrome

[英]Selenium headless chrome with proxy authentication

我正在使用 Selenium (4.1.0) 和 C# (.Net 5.0/Console 应用程序) 自动化 Headless Chrome WebDriver (100.0.48.96.60)。 我想添加代理身份验证,但似乎没有什么对我有用。

到目前为止我已经尝试过:

  1. Selenium 的 BiDi API: https ://www.selenium.dev/documentation/webdriver/bidirectional/bidi_api/#register-basic-auth 它在随机时间导致 2 个异常(可能在打开 url 时):

System.InvalidOperationException:'未收到命令响应:Fetch.getResponseBody'

OpenQA.Selenium.DevTools.CommandResponseException: 'Fetch.continueRequest: Invalid InterceptionId。'

  1. 代理身份验证扩展: https ://github.com/RDavydenko/OpenQA.Selenium.Chrome.ChromeDriverExtensions。 它不适用于无头镀铬。
  2. 汽车信息技术。 我认为也不适用于无头镀铬。
  3. 像这样设置代理:

“用户名:密码@IP:端口”

我能找到的所有答案要么不适用于无头,要么不再适用。 因此,您可以随意留下您对该主题的任何想法。

这个响应是用 Java 编写的,但你可以将它调整为具有两个库的 C#,它使用带有硒的 BI-DI 的 Augmenter,它对我来说无头( https://www.browserstack.com/docs/automate/selenium /event-driven-testing#register-basic-auth )。

您有 4 个变量来填充 PROXY_HOST、PROXY_PORT、PROXY_USER、PROXY_PASS:

    ChromeOptions options = new ChromeOptions();
    options.setHeadless(true);
    options.setProxy(new Proxy().setHttpProxy(PROXY_HOST + ":" + PROXY_PORT)).setSsl(PROXY_HOST + ":" + PROXY_PORT);
    driver = new ChromeDriver(options);
    DevTools devTools = ((HasDevTools) driver).getDevTools();
    devTools.createSession();
    driver = new Augmenter().
            addDriverAugmentation("chrome", HasAuthentication.class, (caps, exec) -> (whenThisMatches, useTheseCredentials) -> devTools.getDomains().network().addAuthHandler(whenThisMatches, useTheseCredentials)).augment(driver);
    ((HasAuthentication) driver).register(UsernameAndPassword.of(PROXY_USER, PROXY_PASS));

暂无
暂无

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

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