ERROR:ssl_client_socket_openssl.cc(1158)] handshake failed with ChromeDriver Chrome browser and Selenium
ERROR:ssl_client_socket_openssl.cc(1158)] handshake failed with ChromeDriver Chrome browser and Selenium
当 运行 我的 python selenium 脚本与 Chrome 驱动程序时,即使一切正常,每次加载页面时我都会收到以下三个错误消息。有没有办法抑制这些消息?
[24412:18772:0617/090708:ERROR:ssl_client_socket_openssl.cc(1158)]
handshake failed; returned -1, SSL error code 1, net_error -100
当浏览器要求您接受来自网站的证书时,您会收到此错误消息。为了避免这些错误,您可以设置为默认忽略这些错误。
对于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)
我遇到了同样的问题。问题是我确实将 webdriver.chrome.driver
系统 属性 设置为 chrome.exe。但是应该下载 chromedriver.exe
并将文件路径设置为 webdriver.chrome.driver
系统 属性.
的值
设置完成后,一切正常。
对我来说,在 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)
这个错误信息...
[ERROR:ssl_client_socket_openssl.cc(855)] handshake failed; returned -1, SSL error code 1, net_error -100
...意味着握手失败 ChromeDriver和[=65=之间] 浏览器 在某些时候失败了。
根本原因分析
此错误是由于 net::SSLClientSocketImpl::DoHandshake and net::SSLClientSocketImpl 在 ssl_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,主要问题是当[=65=时握手失败 ]Driver 与 SSL pages in Chrome 握手。尽管 Chromium 团队通过 net_unittests
、content_tests
和 browser_tests
对 SSL 握手 进行了测试,但没有详尽无遗。依赖上游测试遗漏了一些用例。
结论
此错误不会中断您的测试套件的执行,您可以暂时忽略这个问题,直到它被 Chromium 团队.
修复
ssl 错误意味着证书错误,您不应允许执行或与使用错误 ssl 证书的网址通信。允许意味着您接受与虚假或窃贼地址的通信以及与他们通信时发生的情况。
因此,这不是浏览器问题,也不是您应该通过重新编程浏览器以允许失败的 ssl 证书来解决的问题。
当 运行 我的 python selenium 脚本与 Chrome 驱动程序时,即使一切正常,每次加载页面时我都会收到以下三个错误消息。有没有办法抑制这些消息?
[24412:18772:0617/090708:ERROR:ssl_client_socket_openssl.cc(1158)] handshake failed; returned -1, SSL error code 1, net_error -100
当浏览器要求您接受来自网站的证书时,您会收到此错误消息。为了避免这些错误,您可以设置为默认忽略这些错误。
对于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)
我遇到了同样的问题。问题是我确实将 webdriver.chrome.driver
系统 属性 设置为 chrome.exe。但是应该下载 chromedriver.exe
并将文件路径设置为 webdriver.chrome.driver
系统 属性.
设置完成后,一切正常。
对我来说,在 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)
这个错误信息...
[ERROR:ssl_client_socket_openssl.cc(855)] handshake failed; returned -1, SSL error code 1, net_error -100
...意味着握手失败 ChromeDriver和[=65=之间] 浏览器 在某些时候失败了。
根本原因分析
此错误是由于 net::SSLClientSocketImpl::DoHandshake and net::SSLClientSocketImpl 在 ssl_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,主要问题是当[=65=时握手失败 ]Driver 与 SSL pages in Chrome 握手。尽管 Chromium 团队通过 net_unittests
、content_tests
和 browser_tests
对 SSL 握手 进行了测试,但没有详尽无遗。依赖上游测试遗漏了一些用例。
结论
此错误不会中断您的测试套件的执行,您可以暂时忽略这个问题,直到它被 Chromium 团队.
修复ssl 错误意味着证书错误,您不应允许执行或与使用错误 ssl 证书的网址通信。允许意味着您接受与虚假或窃贼地址的通信以及与他们通信时发生的情况。 因此,这不是浏览器问题,也不是您应该通过重新编程浏览器以允许失败的 ssl 证书来解决的问题。