Für den Firefox müssen Sie die accept_untrusted_certs
FirefoxProfile()
Option auf Folgendes setzen 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()
Für Chrome müssen Sie folgende Argumente hinzufügen :--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()
Für den Internet Explorer müssen Sie die acceptSslCerts
gewünschte Funktion festlegen :
from selenium import webdriver
capabilities = webdriver.DesiredCapabilities().INTERNETEXPLORER
capabilities['acceptSslCerts'] = True
driver = webdriver.Ie(capabilities=capabilities)
driver.get('https://cacert.org/')
driver.close()
Laut Desired Capabilities
Dokumentation sollte die Einstellung acceptSslCerts
auf True
für alle Browser funktionieren, da es sich um eine generische Lese- / Schreibfunktion handelt:
acceptSslCerts
Boolescher Wert
Gibt an, ob die Sitzung standardmäßig alle SSL-Zertifikate akzeptieren soll.
Arbeitsdemo für Firefox:
>>> from selenium import webdriver
Einstellung acceptSslCerts
auf False
:
>>> capabilities = webdriver.DesiredCapabilities().FIREFOX
>>> capabilities['acceptSslCerts'] = False
>>> driver = webdriver.Firefox(capabilities=capabilities)
>>> driver.get('https://cacert.org/')
>>> print(driver.title)
Untrusted Connection
>>> driver.close()
Einstellung acceptSslCerts
auf True
:
>>> 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()
driver.get("javascript:document.getElementById('overridelink').click()")
allow-running-insecure-content
undignore-certificate-errors
undallow-insecure-localhost
undunsafely-treat-insecure-origin-as-secure
(Sie können versuchen, mehr zu finden durch:strings /opt/google/chrome/chrome | grep insecure
und ähnliches Grepping)Für Firefox:
ProfilesIni profile = new ProfilesIni(); FirefoxProfile myprofile = profile.getProfile("default"); myprofile.setAcceptUntrustedCertificates(true); myprofile.setAssumeUntrustedCertificateIssuer(true); WebDriver driver = new FirefoxDriver(myprofile);
Für Chrome können wir verwenden:
DesiredCapabilities capabilities = DesiredCapabilities.chrome(); capabilities.setCapability("chrome.switches", Arrays.asList("--ignore-certificate-errors")); driver = new ChromeDriver(capabilities);
Für Internet Explorer können wir verwenden:
quelle
Für Firefox Python:
Der Firefox-Fehler mit selbstsignierten Zertifikaten wurde behoben: Akzeptieren Sie das SSL-Zertifikat mit dem Marionetten-Firefox-Webdrive-Python-Splitter
"acceptSslCerts" sollte durch "acceptInsecureCerts" ersetzt werden.
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")
quelle
Und in C # (.net Core) mit
Selenium.Webdriver
undSelenium.Chrome.Webdriver
wie folgt:ChromeOptions options = new ChromeOptions(); options.AddArgument("--ignore-certificate-errors"); using (var driver = new ChromeDriver(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),options)) { ... }
quelle
Für Personen, die zu dieser Frage im Zusammenhang mit kopflosem Chrom über Python-Selen kommen, ist https://bugs.chromium.org/p/chromium/issues/detail?id=721739#c102 möglicherweise hilfreich.
Es sieht so aus, als könnten Sie beides tun
chrome_options = Options() chrome_options.add_argument('--allow-insecure-localhost')
oder etwas in der folgenden Richtung (muss möglicherweise für Python angepasst werden):
ChromeOptions options = new ChromeOptions() DesiredCapabilities caps = DesiredCapabilities.chrome() caps.setCapability(ChromeOptions.CAPABILITY, options) caps.setCapability("acceptInsecureCerts", true) WebDriver driver = new ChromeDriver(caps)
quelle
ChromeOptions options = new ChromeOptions().addArguments("--proxy-server=http://" + proxy); options.setAcceptInsecureCerts(true);
quelle
Javascript:
const capabilities = webdriver.Capabilities.phantomjs(); capabilities.set(webdriver.Capability.ACCEPT_SSL_CERTS, true); capabilities.set(webdriver.Capability.SECURE_SSL, false); capabilities.set('phantomjs.cli.args', ['--web-security=no', '--ssl-protocol=any', '--ignore-ssl-errors=yes']); const driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome(), capabilities).build();
quelle
Ich bin mit Selenium und Behat auf dasselbe Problem gestoßen. Wenn Sie die Parameter über übergeben möchten,
behat.yml
muss dies folgendermaßen aussehen:quelle
Das Erstellen eines Profils und anschließend eines Treibers hilft uns, das Zertifikatproblem in Firefox zu umgehen:
var profile = new FirefoxProfile(); profile.SetPreference("network.automatic-ntlm-auth.trusted-uris","DESIREDURL"); driver = new FirefoxDriver(profile);
quelle
In Selenpython müssen Sie Folgendes einstellen
desired_capabilities
:desired_capabilities = { "acceptInsecureCerts": True }
quelle
Für diejenigen, die mit Firefox zu diesem Problem kommen und die oben genannten Lösungen nicht funktionieren, können Sie den folgenden Code ausprobieren (meine ursprüngliche Antwort ist hier ).
from selenium import webdriver profile = webdriver.FirefoxProfile() profile.DEFAULT_PREFERENCES['frozen']['marionette.contentListener'] = True profile.DEFAULT_PREFERENCES['frozen']['network.stricttransportsecurity.preloadlist'] = False profile.DEFAULT_PREFERENCES['frozen']['security.cert_pinning.enforcement_level'] = 0 profile.set_preference('webdriver_assume_untrusted_issuer', False) profile.set_preference("browser.download.folderList", 2) profile.set_preference("browser.download.manager.showWhenStarting", False) profile.set_preference("browser.download.dir", temp_folder) profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/plain, image/png") driver = webdriver.Firefox(firefox_profile=profile)
quelle
Löschen Sie alle bis auf das erforderliche Zertifikat aus dem Zertifikatspeicher Ihres Browsers und konfigurieren Sie den Browser so, dass das Zertifikat automatisch ausgewählt wird, wenn nur ein Zertifikat vorhanden ist.
quelle
Nur ein Update zu diesem Thema.
Treiber erforderlich:
Linux: Centos 7 64bit, Window 7 64bit
Firefox: 52.0.3
Selenium Webdriver: 3.4.0 (Windows), 3.8.1 (Linux Centos)
GeckoDriver: v0.16.0 (Windows), v0.17.0 (Linux Centos)
Code
System.setProperty("webdriver.gecko.driver", "/home/seleniumproject/geckodrivers/linux/v0.17/geckodriver"); ProfilesIni ini = new ProfilesIni(); // Change the profile name to your own. The profile name can // be found under .mozilla folder ~/.mozilla/firefox/profile. // See you profile.ini for the default profile name FirefoxProfile profile = ini.getProfile("default"); DesiredCapabilities cap = new DesiredCapabilities(); cap.setAcceptInsecureCerts(true); FirefoxBinary firefoxBinary = new FirefoxBinary(); GeckoDriverService service =new GeckoDriverService.Builder(firefoxBinary) .usingDriverExecutable(new File("/home/seleniumproject/geckodrivers/linux/v0.17/geckodriver")) .usingAnyFreePort() .usingAnyFreePort() .build(); try { service.start(); } catch (IOException e) { e.printStackTrace(); } FirefoxOptions options = new FirefoxOptions().setBinary(firefoxBinary).setProfile(profile).addCapabilities(cap); driver = new FirefoxDriver(options); driver.get("https://www.google.com"); System.out.println("Life Title -> " + driver.getTitle()); driver.close();
quelle
Ich konnte dies auf .net c # mit PhantomJSDriver mit Selenium Web Driver 3.1 tun
[TestMethod] public void headless() { var driverService = PhantomJSDriverService.CreateDefaultService(@"C:\Driver\phantomjs\"); driverService.SuppressInitialDiagnosticInformation = true; driverService.AddArgument("--web-security=no"); driverService.AddArgument("--ignore-ssl-errors=yes"); driver = new PhantomJSDriver(driverService); driver.Navigate().GoToUrl("XXXXXX.aspx"); Thread.Sleep(6000); }
quelle
Immer wenn ich mit neueren Browsern auf dieses Problem stoße, verwende ich einfach AppRobotic Personal Edition, um auf bestimmte Bildschirmkoordinaten zu klicken, oder gehe durch die Schaltflächen und klicke auf.
Grundsätzlich wird nur die Makrofunktionalität verwendet, bei Headless-Setups funktioniert dies jedoch nicht.
quelle
Ich hatte genau das gleiche Problem. Als ich jedoch versuchte, die Website manuell im Browser zu öffnen, war das Zertifikat korrekt, aber im Detail lautete der Name "DONOTTRUST".
Der Unterschied zwischen den Zertifikaten wurde durch Fiddler verursacht, der im Hintergrund ausgeführt wurde und den gesamten HTTPS-Inhalt entschlüsselte, bevor er erneut verschlüsselt wurde.
Um mein Problem zu beheben, schließen Sie einfach Fiddler auf der Maschine. Wenn Sie Fiddler geöffnet lassen müssen, können Sie in den Fiddler-Einstellungen die Option SSL entschlüsseln deaktivieren.
quelle
WebDriverManager.chromedriver().setup(); ChromeOptions options = new ChromeOptions(); options.addArguments("--ignore-certificate-errors"); driver = new ChromeDriver(options);
Ich habe es für Java mit Chrome-Browser verwendet, es funktioniert gut
quelle
Es sieht so aus, als ob es immer noch keine Standardentscheidung für dieses Problem gibt. Mit anderen Worten - Sie können immer noch nicht sagen "Okay, machen Sie eine Zertifizierung, egal ob Sie Internet Explorer, Mozilla oder Google Chrome sind". Aber ich habe einen Beitrag gefunden, der zeigt, wie man das Problem in Mozilla Firefox umgeht. Wenn Sie daran interessiert sind, können Sie es hier überprüfen .
quelle