W przeglądarce Firefox musisz ustawić accept_untrusted_certs
FirefoxProfile()
opcję 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()
W przypadku przeglądarki Chrome musisz dodać argument:--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()
W przypadku przeglądarki Internet Explorer musisz ustawić acceptSslCerts
żądane możliwości:
from selenium import webdriver
capabilities = webdriver.DesiredCapabilities().INTERNETEXPLORER
capabilities['acceptSslCerts'] = True
driver = webdriver.Ie(capabilities=capabilities)
driver.get('https://cacert.org/')
driver.close()
Właściwie, zgodnie z Desired Capabilities
dokumentacją , ustawienie opcji acceptSslCerts
na True
powinno działać dla wszystkich przeglądarek, ponieważ jest to ogólna możliwość odczytu / zapisu:
acceptSslCerts
boolean
Określa, czy sesja powinna domyślnie akceptować wszystkie certyfikaty SSL.
Działające demo dla przeglądarki Firefox:
>>> from selenium import webdriver
Ustawienie acceptSslCerts
na 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()
Ustawienie acceptSslCerts
na 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
andignore-certificate-errors
andallow-insecure-localhost
andunsafely-treat-insecure-origin-as-secure
(możesz spróbować znaleźć więcej przez:strings /opt/google/chrome/chrome | grep insecure
i podobne grepping)W przeglądarce Firefox:
ProfilesIni profile = new ProfilesIni(); FirefoxProfile myprofile = profile.getProfile("default"); myprofile.setAcceptUntrustedCertificates(true); myprofile.setAssumeUntrustedCertificateIssuer(true); WebDriver driver = new FirefoxDriver(myprofile);
W przypadku Chrome możemy użyć:
DesiredCapabilities capabilities = DesiredCapabilities.chrome(); capabilities.setCapability("chrome.switches", Arrays.asList("--ignore-certificate-errors")); driver = new ChromeDriver(capabilities);
W przeglądarce Internet Explorer możemy użyć:
źródło
W przeglądarce Firefox Python:
Błąd certyfikatu z podpisem własnym Firefoksa został już naprawiony: akceptuj certyfikat SSL za pomocą Marionette Firefox Webdrive Python Splinter
„acceptSslCerts” należy zastąpić wyrażeniem „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")
źródło
A w C # (.net core) używając
Selenium.Webdriver
iSelenium.Chrome.Webdriver
tak:ChromeOptions options = new ChromeOptions(); options.AddArgument("--ignore-certificate-errors"); using (var driver = new ChromeDriver(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),options)) { ... }
źródło
Dla osób, które przychodzą do tego pytania związanego z bezgłowym chromem za pomocą selenu Pythona, przydatne może być https://bugs.chromium.org/p/chromium/issues/detail?id=721739#c102 .
Wygląda na to, że możesz to zrobić
chrome_options = Options() chrome_options.add_argument('--allow-insecure-localhost')
lub coś podobnego do następującego (może wymagać dostosowania do Pythona):
ChromeOptions options = new ChromeOptions() DesiredCapabilities caps = DesiredCapabilities.chrome() caps.setCapability(ChromeOptions.CAPABILITY, options) caps.setCapability("acceptInsecureCerts", true) WebDriver driver = new ChromeDriver(caps)
źródło
ChromeOptions options = new ChromeOptions().addArguments("--proxy-server=http://" + proxy); options.setAcceptInsecureCerts(true);
źródło
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();
źródło
Napotkałem ten sam problem z Selenium i Behat. Jeśli chcesz przekazać parametry przez
behat.yml
, oto jak to powinno wyglądać:źródło
Utworzenie profilu, a następnie sterownika pomaga nam ominąć problem z certyfikatem w przeglądarce Firefox:
var profile = new FirefoxProfile(); profile.SetPreference("network.automatic-ntlm-auth.trusted-uris","DESIREDURL"); driver = new FirefoxDriver(profile);
źródło
W pytonie selenowym musisz ustawić
desired_capabilities
jako:desired_capabilities = { "acceptInsecureCerts": True }
źródło
Dla tych, którzy przychodzą do tego problemu za pomocą przeglądarki Firefox i powyższe rozwiązania nie działają, możesz wypróbować poniższy kod (moja oryginalna odpowiedź jest tutaj ).
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)
źródło
Usuń wszystkie certyfikaty oprócz niezbędnego z magazynu certyfikatów przeglądarki, a następnie skonfiguruj przeglądarkę tak, aby automatycznie wybierała certyfikat, gdy obecny jest tylko jeden certyfikat.
źródło
Tylko aktualizacja dotycząca tego problemu.
Wymagaj sterowników:
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)
Kod
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();
źródło
Udało mi się to zrobić na .net c # z PhantomJSDriver z selenowym sterownikiem sieciowym 3.1
[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); }
źródło
Ilekroć napotykam ten problem w nowszych przeglądarkach, po prostu używam wersji AppRobotic Personal, aby klikać określone współrzędne ekranu lub zakładać przyciski i klikać.
Zasadniczo używa tylko funkcji makr, ale nie będzie działać w konfiguracjach bezgłowych.
źródło
Miałem dokładnie ten sam problem. Jednak gdy próbowałem otworzyć stronę ręcznie w przeglądarce, certyfikat był poprawny, ale w szczegółach nazwa brzmiała „NIE ZAUFAJ”.
Różnica w certyfikacie została spowodowana przez Fiddlera, który działał w tle i odszyfrowywał całą zawartość HTTPS przed jej ponownym zaszyfrowaniem.
Aby naprawić mój problem, po prostu zamknij aplikację Fiddler na komputerze. Jeśli chcesz, aby Fiddler był otwarty, możesz odznaczyć Odszyfruj SSL w Ustawieniach Fiddlera.
źródło
WebDriverManager.chromedriver().setup(); ChromeOptions options = new ChromeOptions(); options.addArguments("--ignore-certificate-errors"); driver = new ChromeDriver(options);
Użyłem go do Java z przeglądarką Chrome, działa dobrze
źródło
Wygląda na to, że nadal nie ma standardowej decyzji dotyczącej tego problemu. Innymi słowy - nadal nie możesz powiedzieć „OK, zrób certyfikat, bez względu na to, czy jesteś Internet Explorer, Mozilla czy Google Chrome”. Ale znalazłem jeden post, który pokazuje, jak obejść problem w Mozilla Firefox. Jeśli jesteś tym zainteresowany, możesz to sprawdzić tutaj .
źródło