我正在尝试使用带有硒和ChromeDriver的本地主机(没有HTTPS)上的集成测试。
Chrome需要使用https证书,但是根据这个问题,我知道我可以使用arg来绕过它--ignore-certificate- errors
我还增加了自己的功能acceptInsecureCerts
,因为这似乎是适当的做法(docs)
chromedriver的响应仍然不是我所期望的:
该网站无法提供安全连接,应用发送的响应无效。ERR_SSL_PROTOCOL_ERROR
我的代码如下:
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': ''}
这是我的驱动程序信息,似乎只acceptInsecureCerts
考虑了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}
为什么我仍然看到ERR_SSL_PROTOCOL_ERROR
?
此错误消息…
This site can’t provide a secure connection app sent an invalid response. ERR_SSL_PROTOCOL_ERROR
…暗示 ChromeDriver 无法启动/产生新的 WebBrowser, 即本地主机上的 Chrome浏览器 会话。
正如你所看到的这个问题,你对 本地主机(没有HTTPS)
按照此评论一眼罩的解决办法是增加argument
--allow-insecure-localhost
通过chromeOptions()
如下:
'goog:chromeOptions': {'args': ['--allow-insecure-localhost'],
'extensions': []}
但是你的主要问题似乎是与 能力 ,你必须设置platform
为集合S ANY
如下:
{'acceptInsecureCerts': True,
'browserName': 'chrome',
'goog:chromeOptions': {'args': ['--ignore-certificate-errors'],
'extensions': []},
'platform': 'ANY',
'version': ''}
正如WebDriver-W3C Living Document的 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.
注意 :此列表并不详尽。
从New Session返回功能时,返回更特定的platformName是有效的,从而允许用户正确标识WebDriver实现在其上运行的操作系统。
因此"platform":"ANY"
, 与其 传递 期望的功能 对象, 不如说 是更具体的"platform":"linux"
方法。
您可以在带有参数的http POST到/
session的Curl错误中找到相关的讨论:{“ desiredCapabilities”:{“
browserName”:“ chrome”,“ platform”:“
ANY”与Selenium和PHPUnit
有关 ChromeDriver , Chrome 和 Selenium Client 版本的更多信息将有助于我们以更好的方式分析问题。但是,根据
ChromeDriver的 历史记录,最近几个版本的 ChromeDriver 中解决了与 证书错误 处理相关的以下问题: __
--ignore-certificate-errors
忽略,只能通过devtools进行设置。因此,有必要certificateError
在以浏览器为目标的DevTools客户端上覆盖和处理事件。一个补丁发布实施新DevTools方法的使用,以替代证书错误处理浏览器的宽这使得在无头模式忽略证书错误太多。Security.enable
/Security.setOverrideCertificateErrors
命令在尝试导航之前。一个修复用简单的“忽略所有证书错误”模式发布,取而代之的是新的,而不是过时的旧覆盖命令setIgnoreCertificateErrors
命令,它也暴露了在浏览器上的目标的安全域,以促进全球范围内应用该重写了整个浏览器。--allow-insecure-localhost
acceptInsecureCerts
--ignore-certificate-errors
'chromedriverVersion': '74.0.3729.6'
,请确保您也正在使用'chrome': '74.0'
(根据ChromeDriver v74.0.3729.6发行说明)问题内容: 使用Python 2.7.5,python模块selenium(2.41.0)和chromedriver(2.9)。 Chrome启动后,会在黄色的弹出栏中显示一条消息:“您正在使用不受支持的命令行标志:-ignore-certificate- errors。稳定性和安全性将受到损害。” 这个简单的例子重现了问题。 如何在python selenium中删除此命令行标志? 问题答案:
在RubyMine和chromedriver 2.10中使用Ruby 2.0.0 p481 当Chrome启动时,它会在黄色弹出栏中显示一条消息:“您正在使用一个不受支持的命令行标志:--Ignore-Certifice-Errors。稳定性和安全性将受到影响。”这个简单的例子再现了问题。 对于Java和Python已经回答了这个问题。我到处找了一个Ruby模拟。有人有建议或知道如何将Python
问题内容: 我正在尝试将具有叠加层的地图快照保存在caches目录中,并在其存在时进行检索。但是,尽管正在创建文件,但当我尝试检索它时,UIImage(contentsOfFile :)返回nil。我已经打印了写和读的文件路径,它们是相同的,并通过下载容器并检查目录来验证文件是否存在,并且文件确实存在。 知道这里的问题是什么吗? 问题答案: 那里的问题是您使用URL属性absoluteString
我正在使用Jenkins在从机中执行selenium脚本,在那里我得到以下错误。 “您使用的命令行标志不受支持:--ignore-certificate-errors。”
使用Python 2.7.5、Python模块selenium(2.41.0)和chromedriver(2.9)。 当Chrome启动时,它会在黄色弹出栏中显示一条消息:“您正在使用一个不受支持的命令行标志:--Ignore-Certifice-Errors。稳定性和安全性将受到影响。”这个简单的例子再现了问题。 如何在python Selenium中删除此命令行标志?
我在Windows7和Windows8操作系统上发现了这一点。