如何忽略 ssl_client_socket_impl.cc(1061)] 在 selenium c# ChromeDriver 中握手失败

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

我已经添加了

 ChromeOptions options = new ChromeOptions();
 options.AddArgument("--ignore-certificate-errors-spki-list");
 options.AddArgument("--ignore-ssl-errors");
 options.AddArgument("test-type");
 options.AddArguments("-incognito");
 options.AddArgument("no-sandbox");
 options.AddArgument("--start-maximized");
 driver = new ChromeDriver(options);

但仍然得到:

ssl_client_socket_impl.cc(1061)] handshake failed error 

如何从控制台抑制此错误?

c# selenium google-chrome webdriver selenium-chromedriver
3个回答
3
投票

这个错误信息...

[ERROR:ssl_client_socket_openssl.cc(855)] handshake failed; returned -1, SSL error code 1, net_error -2

...意味着 ChromeDriverChrome 浏览器 之间的 握手失败 在某个时刻失败了。


根本原因

此错误是由于 ssl_client_socket_impl.cc 中实现的 net::SSLClientSocketImpl::DoHandshakenet::SSLClientSocketImpl 产生的 net::SSLClientSocketImpl::DoHandshake 如下:

int SSLClientSocketImpl::DoHandshake() {
  crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE);
  int rv = SSL_do_handshake(ssl_.get());
  int net_error = OK;
  if (rv <= 0) {
    int ssl_error = SSL_get_error(ssl_.get(), rv);
    if (ssl_error == SSL_ERROR_WANT_CHANNEL_ID_LOOKUP) {
      // The server supports channel ID. Stop to look one up before returning to
      // the handshake.
      next_handshake_state_ = STATE_CHANNEL_ID_LOOKUP;
      return OK;
    }
    if (ssl_error == SSL_ERROR_WANT_X509_LOOKUP &&
    !ssl_config_.send_client_cert) {
      return ERR_SSL_CLIENT_AUTH_CERT_NEEDED;
    }
    if (ssl_error == SSL_ERROR_WANT_PRIVATE_KEY_OPERATION) {
      DCHECK(ssl_config_.client_private_key);
      DCHECK_NE(kSSLClientSocketNoPendingResult, signature_result_);
      next_handshake_state_ = STATE_HANDSHAKE;
      return ERR_IO_PENDING;
    }
    OpenSSLErrorInfo error_info;
    net_error = MapLastOpenSSLError(ssl_error, err_tracer, &error_info);
    if (net_error == ERR_IO_PENDING) {
      // If not done, stay in this state
      next_handshake_state_ = STATE_HANDSHAKE;
      return ERR_IO_PENDING;
    }
    LOG(ERROR) << "handshake failed; returned " << rv << ", SSL error code "
           << ssl_error << ", net_error " << net_error;
    net_log_.AddEvent(
    NetLogEventType::SSL_HANDSHAKE_ERROR,
    CreateNetLogOpenSSLErrorCallback(net_error, ssl_error, error_info));
  }
  next_handshake_state_ = STATE_HANDSHAKE_COMPLETE;
  return net_error;
}

根据 错误:ssl_client_socket_openssl.cc 握手失败,主要问题是当 ChromeDriverChrome 中的 SSL 页面 握手时,握手 失败。虽然Chromium团队通过net_unittests

content_tests
browser_tests
SSL握手
进行了测试,但并不详尽。依赖于上游测试,一些用例被遗漏了。

结论

此错误不会中断您的测试套件执行,您可以暂时忽略此问题,直到Chromium团队修复它。


2
投票

您可以将 Chromium 的日志级别限制为 3,以便仅记录致命错误。请记住,您不会看到任何其他可能导致生产混乱的错误相关消息!代码如下所示:

var chromeOptions = new ChromeOptions();
chromeOptions.AddArgument("log-level=3");
var driver = new ChromeDriver(options : chromeOptions);

Chromium 日志级别 是:

描述 价值
信息 0
警告 1
日志错误 2
LOG_FATAL 3

0
投票
If you encounter similar errors when using selenium
and can not fix it by AddArgument("--ignore-certificate-errors").
solution:
1.AddArgument("log-level=3"),but this will not catch any error log
so you can catch error log by (try catch) like this
2.try{
// your code}
catch(Execption ex){
console.writeline(ex.ToString())
}
Does anyone know of any unintended consequences if this is done?
© www.soinside.com 2019 - 2024. All rights reserved.