c# - 如何在 selenium c# ChromeDriver 中忽略 ssl_client_socket_impl.cc(1061)] 握手失败
问题描述
我已经添加了
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
如何从控制台抑制此错误?
解决方案
此错误消息...
[ERROR:ssl_client_socket_openssl.cc(855)] handshake failed; returned -1, SSL error code 1, net_error -2
...意味着ChromeDriver和Chrome 浏览器之间的握手失败在某些时候失败。
根本原因
此错误是由于在ssl_client_socket_impl.cc net::SSLClientSocketImpl::DoHandshake中实现的net::SSLClientSocketImpl::DoHandshake和net::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 握手失败,主要问题是当ChromeDriver与Chrome中的SSL 页面握手时握手失败。虽然Chromium团队通过,进行 SSL 握手测试,但并不详尽。依赖上游测试,一些用例被遗漏了。net_unittests
content_tests
browser_tests
结论
这个错误不会中断你的测试套件的执行,你可以暂时忽略这个问题,直到它被Chromium Team修复。
推荐阅读
- r - data.table 列表:按变量过滤
- git - 来自另一个分支的结帐文件夹不会删除文件
- javascript - 如何修复 Android React Native AssembleRelease 中的崩溃强制关闭
- python - 如何通过图像处理仅在图像上保留垂直线?
- asp.net-mvc - 防止 MVC 中的后退按钮
- sql - Min() 和 Max() 基于 sql server 中的分区
- json - 如何获取精确器中匹配元素的数量(Json/css/xpath)
- c++ - c++20 模块(使用 Xcode 11 进行实验)
- ios - 从另一个视图控制器导航栏加载视图控制器的 UIWebView 中的请求 url
- azure-active-directory - 没有 Microsoft 登录页面的 Azure AD SSO