错误:ssl_client_socket_openssl.cc(1158)]握手失败,ChromeDriver Chrome浏览器和Selenium

时间:2016-06-17 14:09:25

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

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

  

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

5 个答案:

答案 0 :(得分:9)

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

对于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)

答案 1 :(得分:1)

对我而言,在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)

答案 2 :(得分:1)

此错误消息...

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

...表示在 ChromeDriver Chrome浏览器之间的握手失败有时失败。

根本原因分析

此错误是由于在net::SSLClientSocketImpl::DoHandshake中实现的net::SSLClientSocketImplssl_client_socket_impl.cc 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;
}

根据ERROR:ssl_client_socket_openssl.cc handshake failed,主要问题是握手失败,当 ChromeDriver SSL页面进行握手 Chrome 中的strong>。尽管 Chromium 小组通过net_unittestscontent_testsbrowser_tests SSL握手进行了测试,但并没有穷尽所有强>。依赖于上游测试而忽略了一些用例。

结论

此错误不会 Test Suite 执行 执行,并且在解决此问题之前,您可以暂时忽略该问题。由 Chromium小组提供。

答案 3 :(得分:0)

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

设置完成后,一切正常。

答案 4 :(得分:-1)

ssl错误意味着证书错误,并且您不应该允许使用错误的ssl证书的网站执行或通信。 allow表示您接受带有虚假或小偷地址的通信,以及与他们通信时发生的一切。 因此,这不是浏览器问题,也不是应该通过重新配置浏览器以允许失败的ssl证书解决的问题。