如何使用Selenium处理证书?

59 python browser selenium python-3.x selenium-webdriver

我正在使用Selenium来启动浏览器.如何处理要求浏览器接受证书的网页(URL)?

在Firefox中,我可能有一个这样的网站要求我接受这样的证书:

火狐

在Internet Explorer浏览器上,我可能会得到以下内容:

在此输入图像描述

在Google Chrome上:

谷歌浏览器

我再重复一个问题:当我使用Selenium(Python编程语言)启动浏览器(Internet Explorer,Firefox和Google Chrome)时,如何自动接受网站证书

ale*_*cxe 89

对于Firefox,您需要将accept_untrusted_certs FirefoxProfile()选项设置为True:

from selenium import webdriver

profile = webdriver.FirefoxProfile()
profile.accept_untrusted_certs = True

driver = webdriver.Firefox(firefox_profile=profile)
driver.get('https://cacert.org/')

driver.close()
Run Code Online (Sandbox Code Playgroud)

对于Chrome,您需要添加参数:--ignore-certificate-errors ChromeOptions()

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')

driver = webdriver.Chrome(chrome_options=options)
driver.get('https://cacert.org/')

driver.close()
Run Code Online (Sandbox Code Playgroud)

对于Internet Explorer,您需要设置acceptSslCerts所需的功能:

from selenium import webdriver

capabilities = webdriver.DesiredCapabilities().INTERNETEXPLORER
capabilities['acceptSslCerts'] = True

driver = webdriver.Ie(capabilities=capabilities)
driver.get('https://cacert.org/')

driver.close()
Run Code Online (Sandbox Code Playgroud)

实际上,根据Desired Capabilities文档,设置acceptSslCerts功能True应适用于所有浏览器,因为它是通用的读/写功能:

acceptSslCerts

布尔

会话是否应默认接受所有SSL证书.


Firefox的工作演示:

>>> from selenium import webdriver
Run Code Online (Sandbox Code Playgroud)

设置acceptSslCertsFalse:

>>> capabilities = webdriver.DesiredCapabilities().FIREFOX
>>> capabilities['acceptSslCerts'] = False
>>> driver = webdriver.Firefox(capabilities=capabilities)
>>> driver.get('https://cacert.org/')
>>> print(driver.title)
Untrusted Connection
>>> driver.close()
Run Code Online (Sandbox Code Playgroud)

设置acceptSslCertsTrue:

>>> capabilities = webdriver.DesiredCapabilities().FIREFOX
>>> capabilities['acceptSslCerts'] = True
>>> driver = webdriver.Firefox(capabilities=capabilities)
>>> driver.get('https://cacert.org/')
>>> print(driver.title)
Welcome to CAcert.org
>>> driver.close()
Run Code Online (Sandbox Code Playgroud)

  • 我无法在IE 11上运行它,它只是不断向我显示证书错误页面 (12认同)
  • 此答案不再有效,请改用"acceptInsecureCerts" (5认同)
  • 对于 chromedriver,我最终将所有这四个字符串传递给 options.add_argument --> `allow-running-insecure-content` 和 `ignore-certificate-errors` 和 `allow-insecure-localhost` 和 `unsafely-treat-insecure -origin-as-secure(您可以尝试通过以下方式找到更多信息:“strings /opt/google/chrome/chrome | grep insecure”和类似的 grep) (3认同)
  • 这个评论可能会很晚,但对于现在提出问题的人来说很有帮助.我尝试了上述所有内容,但没有任何效果.只设法传递错误:`driver.get("javascript:document.getElementById('overridelink').click()")` (2认同)

小智 7

对于Firefox:

ProfilesIni profile = new ProfilesIni();
FirefoxProfile myprofile = profile.getProfile("default");
myprofile.setAcceptUntrustedCertificates(true);
myprofile.setAssumeUntrustedCertificateIssuer(true);
WebDriver driver = new FirefoxDriver(myprofile);
Run Code Online (Sandbox Code Playgroud)

对于Chrome,我们可以使用:

DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("chrome.switches", Arrays.asList("--ignore-certificate-errors"));
driver = new ChromeDriver(capabilities);
Run Code Online (Sandbox Code Playgroud)

对于Internet Explorer,我们可以使用:

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);      
Webdriver driver = new InternetExplorerDriver(capabilities);
Run Code Online (Sandbox Code Playgroud)

  • 问题是关于Python.你至少可以写出那种语言. (4认同)

Rém*_*tte 6

对于 Firefox Python:

Firefox 自签名证书错误现已修复: 使用 marionette firefox webdrive python splinter 接受 ssl 证书

“acceptSslCerts”应替换为“acceptInsecureCerts”

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

caps = DesiredCapabilities.FIREFOX.copy()
caps['acceptInsecureCerts'] = True
ff_binary = FirefoxBinary("path to the Nightly binary")

driver = webdriver.Firefox(firefox_binary=ff_binary, capabilities=caps)
driver.get("https://expired.badssl.com")
Run Code Online (Sandbox Code Playgroud)


oxe*_*xer 6

对于通过 python selenium 提出与无头 chrome 相关的问题的人,您可能会发现https://bugs.chromium.org/p/chromium/issues/detail?id=721739#c102很有用。

看起来你可以做

chrome_options = Options()
chrome_options.add_argument('--allow-insecure-localhost')
Run Code Online (Sandbox Code Playgroud)

或类似以下内容的内容(可能需要适应 python):

ChromeOptions options = new ChromeOptions()
DesiredCapabilities caps = DesiredCapabilities.chrome()
caps.setCapability(ChromeOptions.CAPABILITY, options)
caps.setCapability("acceptInsecureCerts", true)
WebDriver driver = new ChromeDriver(caps)
Run Code Online (Sandbox Code Playgroud)


Sge*_*dda 6

在 C# (.net core) 中使用Selenium.WebdriverandSelenium.Chrome.Webdriver像这样:

ChromeOptions options = new ChromeOptions();
options.AddArgument("--ignore-certificate-errors");
using (var driver = new ChromeDriver(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),options))
{ 
  ...
}
Run Code Online (Sandbox Code Playgroud)