Python ChromeDriver ERR_SSL_PROTOCOL_ERROR尽管--忽略证书错误
我正在尝试使用selenium和ChromeDriver在本地主机(没有HTTPS)上运行集成测试 Chrome需要https证书,但从问题中我了解到,我可以使用argPython ChromeDriver ERR_SSL_PROTOCOL_ERROR尽管--忽略证书错误,python,selenium,google-chrome,selenium-chromedriver,selenium-grid,Python,Selenium,Google Chrome,Selenium Chromedriver,Selenium Grid,我正在尝试使用selenium和ChromeDriver在本地主机(没有HTTPS)上运行集成测试 Chrome需要https证书,但从问题中我了解到,我可以使用arg--忽略证书错误 我还添加了我的功能AcceptSecureCerts,因为这似乎是适当的操作过程() chromedriver的响应仍然不是我所期望的: 此网站无法提供安全连接,应用程序发送了无效响应。 错误\u SSL\u协议\u错误 我的代码如下: from selenium import webdriver from se
--忽略证书错误
我还添加了我的功能AcceptSecureCerts
,因为这似乎是适当的操作过程()
chromedriver的响应仍然不是我所期望的:
此网站无法提供安全连接,应用程序发送了无效响应。
错误\u SSL\u协议\u错误
我的代码如下:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# make options (principally to ignore certificate)
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
# add acceptInsecureCerts
capabilities = options.to_capabilities()
capabilities['acceptInsecureCerts'] = True
print(capabilities) # see below
driver = webdriver.Remote(
command_executor=SELENIUM_HUB,
desired_capabilities=capabilities
)
print(driver.__dict__) # see further below
app_login_url = 'http://app:8000/accounts/login/'
driver.get(app_login_url)
我的能力:
{'acceptInsecureCerts': True,
'browserName': 'chrome',
'goog:chromeOptions': {'args': ['--ignore-certificate-errors'],
'extensions': []},
'platform': 'ANY',
'version': ''}
这是我的驱动程序信息,似乎只考虑了acceptsecurecerts
arg:
{'_file_detector': <selenium.webdriver.remote.file_detector.LocalFileDetector object at 0x7fb42bde10f0>,
'_is_remote': True,
'_mobile': <selenium.webdriver.remote.mobile.Mobile object at 0x7fb42bb5e400>,
'_switch_to': <selenium.webdriver.remote.switch_to.SwitchTo object at 0x7fb42bdd4898>,
'capabilities': {'acceptInsecureCerts': True,
'acceptSslCerts': True,
'applicationCacheEnabled': False,
'browserConnectionEnabled': False,
'browserName': 'chrome',
'chrome': {'chromedriverVersion': '74.0.3729.6 '
'(255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29})',
'userDataDir': '/tmp/.com.google.Chrome.vc1ZvB'},
'cssSelectorsEnabled': True,
'databaseEnabled': False,
'goog:chromeOptions': {'debuggerAddress': 'localhost:40815'},
'handlesAlerts': True,
'hasTouchScreen': False,
'javascriptEnabled': True,
'locationContextEnabled': True,
'mobileEmulationEnabled': False,
'nativeEvents': True,
'networkConnectionEnabled': False,
'pageLoadStrategy': 'normal',
'platform': 'Linux',
'proxy': {},
'rotatable': False,
'setWindowRect': True,
'strictFileInteractability': False,
'takesHeapSnapshot': True,
'takesScreenshot': True,
'timeouts': {'implicit': 0,
'pageLoad': 300000,
'script': 30000},
'unexpectedAlertBehaviour': 'ignore',
'version': '74.0.3729.169',
'webStorageEnabled': True,
'webdriver.remote.sessionid': '1cf77f237e966bac6ca15d4d9c107423'},
'command_executor': <selenium.webdriver.remote.remote_connection.RemoteConnection object at 0x7fb42be0cf98>,
'error_handler': <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7fb427d08a20>,
'session_id': '1cf77f237e966bac6ca15d4d9c107423',
'w3c': False}
{“文件检测器”:,
“_is_remote”:对,
"流动电话:,,
“_切换到”:,
“功能”:{“AcceptUnsecureCerts”:True,
“acceptSslCerts”:正确,
“applicationCacheEnabled”:False,
“browserConnectionEnabled”:False,
'browserName':'chrome',
'chrome':{'chromedriverVersion':'74.0.3729.6'
"(255758eccf3d244491b8a1317aa76e1ce10d57e9参考文献/分行行长/3729{29}),,
'userDataDir':'/tmp/.com.google.Chrome.vc1ZvB'},
“CSSSelectorEnabled”:True,
“databaseEnabled”:False,
'goog:chromeOptions':{'debuggerAddress':'localhost:40815'},
“handlesAlerts”:正确,
“hasTouchScreen”:错误,
“javascriptEnabled”:True,
“locationContextEnabled”:True,
“mobileEmulationEnabled”:False,
“nativeEvents”:没错,
“networkConnectionEnabled”:False,
“pageLoadStrategy”:“正常”,
“平台”:“Linux”,
'代理':{},
“可旋转”:错误,
“setWindowRect”:True,
“StrictFileInteractibility”:False,
“takesHeapSnapshot”:对,
“takesScreenshot”:正确,
“超时”:{“隐式”:0,
“页面加载”:300000,
“脚本”:30000},
“意外的行为”:“忽略”,
“版本”:“74.0.3729.169”,
“WebStorage已启用”:True,
“webdriver.remote.sessionid”:“1cf77f237e966bac6ca15d4d9c107423”,
“命令执行者”:,
“错误处理程序”:,
“会话id”:“1cf77f237e966bac6ca15d4d9c107423”,
“w3c”:False}
为什么我仍然看到ERR\u SSL\u PROTOCOL\u ERROR
?根据(展开“页面加载错误代码和问题”部分),Chrome为任何SSL相关错误提供ERR\u SSL\u PROTOCOL\u ERROR
。这包括:
- 证书错误
- 连接参数协商失败(例如,要使用的TLS版本和流加密)
- 对等方违反协议
由于你无法从Chrome上获得更多细节,因此在另一个应用程序(如Firefox或with)中打开页面可以为你提供更多关于正在发生的事情的细节
嗅探数据包,例如可以显示连接的初始阶段,包括协商阶段;如果服务器是您的(因此您有它的私钥),您还可以--这将为您提供完整的信息。此错误消息
This site can’t provide a secure connection app sent an invalid response. ERR_SSL_PROTOCOL_ERROR
…表示ChromeDriver无法在您的本地主机上启动/生成新的Web浏览器,即Chrome浏览器会话
正如您在本地主机(没有HTTPS)上看到的一样,盲折叠解决方案是添加参数——通过chromeOptions()允许不安全的本地主机
,如下所示:
'goog:chromeOptions': {'args': ['--allow-insecure-localhost'],
'extensions': []}
{'acceptInsecureCerts': True,
'browserName': 'chrome',
'goog:chromeOptions': {'args': ['--ignore-certificate-errors'],
'extensions': []},
'platform': 'ANY',
'version': ''}
然而,您的主要问题似乎是您将平台设置为任何
的功能,如下所示:
'goog:chromeOptions': {'args': ['--allow-insecure-localhost'],
'extensions': []}
{'acceptInsecureCerts': True,
'browserName': 'chrome',
'goog:chromeOptions': {'args': ['--ignore-certificate-errors'],
'extensions': []},
'platform': 'ANY',
'version': ''}
根据platformName一节所述,以下平台名称是常见的,具有良好的语义,并且在匹配功能时,可以通过将其作为知名操作系统的有效同义词来实现最大的互操作性:
Key System
--- ------
"linux" Any server or desktop system based upon the Linux kernel.
"mac" Any version of Apple’s macOS.
"windows" Any version of Microsoft Windows, including desktop and mobile versions.
注意:此列表并非详尽无遗
当从新会话返回功能时,返回更具体的平台名是有效的,这样用户就可以正确识别运行WebDriver实现的操作系统
因此,与其在desiredCapabilities对象中传递“platform”:“ANY”
,不如采用更具体的“platform”:“linux”
方法
您可以在中找到相关的讨论
有关ChromeDriver、Chrome和Selenium客户端vrsion的更多信息将有助于我们更好地分析问题。然而,根据ChromeDriver的历史记录,ChromeDriver的最近几个版本解决了与证书错误处理相关的以下问题:
- :由于headless chrome无法显示SSL证书错误的UI警告,因此发布了一个命令,以将错误公开为DevTools事件,并通过DevTools命令控制要执行的操作李>
- :在Chromium的UI版本中,先前通过CLI开关控制的某些(如
--忽略证书错误
)被静默忽略,并且只能通过devtools进行设置。因此,有必要覆盖和处理浏览器目标DevTools客户端上的certificateError
事件。发布了一个应用程序,实现了使用新的DevTools方法覆盖浏览器范围内的证书错误处理,这也允许在headless模式下忽略证书错误李>
- :以前的DevTools al