【问题标题】:How to ignore ssl_client_socket_impl.cc(1061)] handshake failed in selenium c# ChromeDriver如何在 selenium c# ChromeDriver 中忽略 ssl_client_socket_impl.cc(1061)] 握手失败
【发布时间】:2019-05-13 03:06:03
【问题描述】:

我已经添加了

 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 

如何从控制台抑制这个错误?

【问题讨论】:

  • 登录开始登录成功成功你需要用更多的二进制版本更新问题,代码试验和相关的 HTML。
  • 代码工作正常,没有错误,但控制台打印显示握手失败错误,如何从控制台抑制这些错误

标签: c# selenium google-chrome webdriver selenium-chromedriver


【解决方案1】:

此错误消息...

[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::DoHandshake中实现的net::SSLClientSocketImpl::DoHandshakenet::SSLClientSocketImpl产生的,如下:

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;
}

根据ERROR:ssl_client_socket_openssl.cc handshake failed,主要问题是 ChromeDriverSSL 页面 握手时 失败Chrome 中。虽然 Chromium 团队通过 net_unittestscontent_testsbrowser_testsSSL 握手 进行了测试,但并非详尽。依赖上游测试,一些用例被遗漏了。

结论

此错误不会中断您的 Test Suite执行,您可以暂时忽略此问题,直到它得到修复Chromium 团队

【讨论】:

  • 谢谢!那是 2 年前的事了……错误仍然存​​在……
【解决方案2】:

您可以将 Selenium 的日志级别限制为 3,以便只记录致命错误。代码如下所示:

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

Selenium 日志级别为:Info = 0、Warning = 1、Log_error = 2、Log_fatal = 3。

【讨论】:

    猜你喜欢
    • 2020-05-30
    • 2021-04-21
    • 2017-01-20
    • 2016-10-19
    • 2018-07-28
    • 2017-06-19
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多