【问题标题】:ERROR:ssl_client_socket_openssl.cc(1158)] handshake failed with ChromeDriver Chrome browser and Selenium错误:ssl_client_socket_openssl.cc(1158)] ChromeDriver Chrome 浏览器和 Selenium 握手失败
【发布时间】:2016-10-19 10:06:19
【问题描述】:

当使用 Chrome 驱动程序运行我的 python selenium 脚本时,即使一切正常,每次加载页面时我都会收到以下三个错误消息。有没有办法抑制这些消息?

[24412:18772:0617/090708:ERROR:ssl_client_socket_openssl.cc(1158)] 握手失败;返回 -1,SSL 错误代码 1,net_error -100

【问题讨论】:

  • 这可能表明该网站需要一个不在您的 Web 浏览器的证书存储中的证书。 SSL 有这个证书交换握手协议,在继续之前必须通过。

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


【解决方案1】:

当浏览器要求您接受来自网站的证书时,您会收到此错误。您可以设置默认忽略这些错误以避免这些错误。

对于 Chrome,您需要添加 --ignore-certificate-errors--ignore-ssl-errors ChromeOptions() 参数:

options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')
driver = webdriver.Chrome(chrome_options=options)

对于 Firefox,您需要将 accept_untrusted_certs FirefoxProfile() 选项设置为 True:

profile = webdriver.FirefoxProfile()
profile.accept_untrusted_certs = True
driver = webdriver.Firefox(firefox_profile=profile)

对于 Internet Explorer,您需要设置 acceptSslCerts 所需的功能:

capabilities = webdriver.DesiredCapabilities().INTERNETEXPLORER
capabilities['acceptSslCerts'] = True
driver = webdriver.Ie(capabilities=capabilities)

【讨论】:

  • 这仍然是最新的吗?我正在尝试解决方案,但仍然出现错误...
【解决方案2】:

此错误消息...

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

...暗示 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 握手 进行了测试,但并非详尽。依赖上游测试,一些用例被遗漏了。

结论

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

【讨论】:

    【解决方案3】:

    我也遇到了同样的问题。问题是我确实将webdriver.chrome.driver 系统属性设置为chrome.exe。但是应该下载chromedriver.exe并将文件路径设置为webdriver.chrome.driver系统属性的值。

    设置完成后,一切正常。

    【讨论】:

    • 对不起,您能否详细说明如何执行此操作,我不确定我是否关注
    【解决方案4】:

    对我来说,在 chrome 选项中编写如下代码后它得到了解决,从上面的答案改变是包括 spki-list。

    options = webdriver.ChromeOptions()
    options.add_argument('--ignore-certificate-errors-spki-list')
    options.add_argument('--ignore-ssl-errors')
    driver = webdriver.Chrome(chrome_options=options)
    

    【讨论】:

      【解决方案5】:

      ssl 错误意味着证书错误,您不应允许执行或与使用错误 ssl 证书的网址进行通信。允许意味着您接受与虚假或小偷地址的通信以及与他们通信时发生的任何事情。 因此,这不是浏览器问题,也不是您应该通过重新编程浏览器以允许失败的 ssl 证书来解决的问题。

      【讨论】:

        猜你喜欢
        • 2017-01-20
        • 2020-05-30
        • 2018-11-15
        • 2021-04-21
        • 1970-01-01
        • 2019-05-13
        • 2014-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多