Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ChromeDriver ERR_SSL_PROTOCOL_ERROR尽管--忽略证书错误_Python_Selenium_Google Chrome_Selenium Chromedriver_Selenium Grid - Fatal编程技术网

Python ChromeDriver ERR_SSL_PROTOCOL_ERROR尽管--忽略证书错误

Python 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

我正在尝试使用selenium和ChromeDriver在本地主机(没有HTTPS)上运行集成测试

Chrome需要https证书,但从问题中我了解到,我可以使用arg
--忽略证书错误

我还添加了我的功能
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