सेलेनियम का उपयोग करके प्रमाण पत्र से कैसे निपटें?


86

मैं ब्राउज़र लॉन्च करने के लिए सेलेनियम का उपयोग कर रहा हूं । मैं उन वेबपृष्ठों (URL) से कैसे निपट सकता हूं जो ब्राउज़र को प्रमाणपत्र स्वीकार करने के लिए कहेंगे या नहीं?

फ़ायरफ़ॉक्स में, मेरे पास एक वेबसाइट हो सकती है जो मुझसे इस तरह से इसके प्रमाण पत्र को स्वीकार करने के लिए कहती है:

फ़ायर्फ़ॉक्स

Internet Explorer ब्राउज़र पर, मुझे ऐसा कुछ मिल सकता है:

यहां छवि विवरण दर्ज करें

Google Chrome पर:

गूगल क्रोम

मैं अपना प्रश्न दोहराता हूं: जब मैं ब्राउज़र (इंटरनेट एक्सप्लोरर, फ़ायरफ़ॉक्स और Google क्रोम) सेलेनियम (पायथन प्रोग्रामिंग भाषा) के साथ लॉन्च करता हूं तो मैं वेबसाइट के प्रमाणपत्र की स्वीकृति को कैसे स्वचालित कर सकता हूं ?

जवाबों:


143

फ़ायरफ़ॉक्स के लिए, आपको 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()

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()

इंटरनेट एक्सप्लोरर के लिए, आपको acceptSslCertsवांछित क्षमता निर्धारित करने की आवश्यकता है:

from selenium import webdriver

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

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

driver.close()

वास्तव में, Desired Capabilitiesप्रलेखन के अनुसार , सभी ब्राउज़र के लिए काम करने की acceptSslCertsक्षमता स्थापित करना Trueचाहिए क्योंकि यह एक सामान्य पढ़ने / लिखने की क्षमता है:

acceptSslCerts

बूलियन

क्या सत्र को डिफ़ॉल्ट रूप से सभी एसएसएल सिरे को स्वीकार करना चाहिए।


फ़ायरफ़ॉक्स के लिए काम कर रहे डेमो:

>>> from selenium import webdriver

स्थापना acceptSslCertsकरने के लिए 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()

स्थापना acceptSslCertsकरने के लिए 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()

12
मैं इसे IE 11 पर काम नहीं कर पा रहा हूँ, यह सिर्फ मुझे सर्टिफिकेट एरर पेज दिखा रहा है
estemendoza

फ़ायरफ़ॉक्स के लिए 48+ जेकोड्राइवर का उपयोग करना अभी भी मुद्दा है, जेकोड्राइवर में यह खुला मुद्दा है, उनके पास अभी भी इसके लिए कोई विचार नहीं है, बग इश्यू
ऑल्टर हू

6
यह उत्तर अब मान्य नहीं है, इसके बजाय 'acceptInsecureCerts' का उपयोग करें
rtaft

2
यह टिप्पणी बहुत देर से हो सकती है, लेकिन अब सवाल तक पहुंचने वाले लोगों के लिए सहायक है। मैंने उपरोक्त सभी की कोशिश की और कुछ भी काम नहीं किया। केवल त्रुटि के साथ पास करने में कामयाब रहे:driver.get("javascript:document.getElementById('overridelink').click()")
डिएगो एफ मदीना

3
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समान grepping और)
pestophagous

8

फ़ायरफ़ॉक्स के लिए:

ProfilesIni profile = new ProfilesIni();
FirefoxProfile myprofile = profile.getProfile("default");
myprofile.setAcceptUntrustedCertificates(true);
myprofile.setAssumeUntrustedCertificateIssuer(true);
WebDriver driver = new FirefoxDriver(myprofile);

के लिये क्रोम हम उपयोग कर सकते हैं:

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

के लिए इंटरनेट एक्सप्लोरर हम उपयोग कर सकते हैं:

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);      
Webdriver driver = new InternetExplorerDriver(capabilities);

4
सवाल अजगर के बारे में था। आप कम से कम लिख सकते हैं कि भाषा क्या है।
user1

1
सावधान रहो, 'ProfilesIni' पदावनत है!
हैप्पी बर्ड

आशा है कि जावा संस्करण ChromeOptions विकल्पों = new ChromeOptions () में मदद कर सकता है; विकल्प .addArguments ("- उपेक्षा-एसएसएल-त्रुटियां = हां", "--ignore-certificate-त्रुटियाँ"); क्रोमड्राइवर चालक = नया क्रोमड्राइवर (विकल्प);
रॉबर्टो पेट्रिली

6

फ़ायरफ़ॉक्स अजगर के लिए:

फ़ायरफ़ॉक्स स्व-हस्ताक्षरित प्रमाण पत्र बग को अब ठीक कर दिया गया है: marionette firefox webdrive pythy splinter के साथ ssl प्रमाणपत्र स्वीकार करें

"acceptSsCCerts" को "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")

1
और अब फ़ायरफ़ॉक्स 52 लाइव है। अपग्रेड फ़ायरफ़ॉक्स , उन्नयन सेलेनियम v3.3 करने के लिए, डाउनलोड geckodriver v0.15 करने के लिए और तुम भी बाइनरी पथ और आवश्यकता नहीं है!
रेमी डेबेट

4

और C # (.net core) का उपयोग करके Selenium.Webdriverऔर Selenium.Chrome.Webdriverइस तरह:

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

3

पायथन सेलेनियम के माध्यम से हेडलेस क्रोम से संबंधित इस प्रश्न पर आने वाले लोगों के लिए, आप https://bugs.chromium.org/p/chromium/issues/detail?id=721739#c102 पा सकते हैं उपयोगी ।

ऐसा लगता है कि आप या तो कर सकते हैं

chrome_options = Options()
chrome_options.add_argument('--allow-insecure-localhost')

या निम्नलिखित की पंक्तियों के साथ कुछ (अजगर के लिए अनुकूलित करने की आवश्यकता हो सकती है):

ChromeOptions options = new ChromeOptions()
DesiredCapabilities caps = DesiredCapabilities.chrome()
caps.setCapability(ChromeOptions.CAPABILITY, options)
caps.setCapability("acceptInsecureCerts", true)
WebDriver driver = new ChromeDriver(caps)

3
    ChromeOptions options = new ChromeOptions().addArguments("--proxy-server=http://" + proxy);
    options.setAcceptInsecureCerts(true);

1
हालांकि यह कोड स्निपेट प्रश्न को हल कर सकता है, जिसमें स्पष्टीकरण सहित वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और उन लोगों को आपके कोड सुझाव के कारणों का पता नहीं चल सकता है
Ak47

2

जावास्क्रिप्ट:

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();

2

मैं सेलेनियम और बेहट के साथ एक ही मुद्दे में भाग गया। यदि आप मापदंडों को पास करना चाहते हैं behat.yml, तो यहां यह देखना होगा:

default:
    extensions:
        Behat\MinkExtension:
            base_url: https://my-app.com
            default_session: selenium2
            selenium2:
                browser: firefox
                capabilities:
                    extra_capabilities:
                        acceptInsecureCerts: true

1

एक प्रोफ़ाइल बनाना और फिर एक ड्राइवर फ़ायरफ़ॉक्स में सर्टिफिकेट इश्यू के आसपास आने में हमारी मदद करता है:

var profile = new FirefoxProfile();
profile.SetPreference("network.automatic-ntlm-auth.trusted-uris","DESIREDURL");
driver = new FirefoxDriver(profile);

3
Internet Explorer और Google Chrome के बारे में क्या?

1

सेलेनियम पायथन में, आपको desired_capabilitiesनिम्न के रूप में सेट करना होगा :

desired_capabilities = {
    "acceptInsecureCerts": True
}

1

जो लोग फ़ायरफ़ॉक्स का उपयोग कर इस मुद्दे पर आते हैं और उपरोक्त समाधान काम नहीं करते हैं, आप नीचे दिए गए कोड की कोशिश कर सकते हैं (मेरा मूल उत्तर यहां है )।

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)

0

अपने ब्राउज़र के प्रमाणपत्र स्टोर से सभी आवश्यक प्रमाणपत्रों को हटा दें और फिर केवल एक प्रमाणपत्र मौजूद होने पर ब्राउज़र को स्वचालित रूप से प्रमाणपत्र का चयन करने के लिए कॉन्फ़िगर करें।


0

बस इस मुद्दे के बारे में एक अद्यतन।

ड्राइवरों की आवश्यकता:

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)

कोड

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();

0

मैं यह करने में सक्षम था। सेलेनियम वेब ड्राइवर 3.1 के साथ PhantomJSDriver के साथ .net c #

 [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);
    }

0

जब भी मैं नए ब्राउज़रों के साथ इस मुद्दे पर दौड़ता हूं, तो मैं बस विशिष्ट स्क्रीन निर्देशांक, या बटन के माध्यम से टैब और क्लिक करने के लिए AppRobotic व्यक्तिगत संस्करण का उपयोग करता हूं।

मूल रूप से यह सिर्फ अपनी मैक्रो कार्यक्षमता का उपयोग कर रहा है, लेकिन हेडलेस सेटअप पर काम नहीं करेगा।


0

मेरे पास एक ही मुद्दा था। हालाँकि जब मैंने वेबसाइट को मैन्युअल रूप से ब्राउज़र में खोलने की कोशिश की तो प्रमाणपत्र सही था, लेकिन विवरण में नाम "DONOTTRUST" था।

प्रमाणपत्र का अंतर फ़िडलर के कारण था जो पृष्ठभूमि में चल रहा था और इसे पुन: क्रिप्ट करने से पहले सभी HTTPS सामग्री को डिक्रिप्ट कर रहा था।

मेरी समस्या को ठीक करने के लिए, मशीन पर सिर्फ फिडलर को बंद करें। यदि आपको फ़िडलर को खोलकर रखने की आवश्यकता है, तो आप फ़िडलर सेटिंग में SSL को अनचेक कर सकते हैं।


0
WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
options.addArguments("--ignore-certificate-errors");
driver = new ChromeDriver(options);

मैंने इसे क्रोम ब्राउज़र के साथ जावा के लिए उपयोग किया है यह अच्छा काम कर रहा है


1
हालांकि यह कोड प्रश्न को हल कर सकता है, जिसमें यह भी बताया गया है कि यह समस्या कैसे और क्यों हल करती है, इससे वास्तव में आपके पोस्ट की गुणवत्ता को बेहतर बनाने में मदद मिलेगी, और शायद अधिक वोट भी मिलेंगे। याद रखें कि आप भविष्य में पाठकों के लिए सवाल का जवाब दे रहे हैं, न कि केवल उस व्यक्ति से जो अब पूछ रहा है। कृपया स्पष्टीकरण जोड़ने के लिए अपने उत्तर को संपादित करें और संकेत दें कि क्या सीमाएँ और मान्यताएँ लागू होती हैं।
डेविड बक

-3

ऐसा लगता है कि यह अभी भी इस समस्या का एक मानक निर्णय नहीं है। दूसरे शब्दों में - आप अभी भी नहीं कह सकते हैं "ठीक है, एक प्रमाणीकरण करें, जो कुछ भी अगर आप इंटरनेट एक्सप्लोरर, मोज़िला या Google क्रोम हैं"। लेकिन मुझे एक पोस्ट मिली जो दिखाती है कि मोज़िला फ़ायरफ़ॉक्स में समस्या के आसपास कैसे काम किया जाए। यदि आप इसमें रुचि रखते हैं, तो आप इसे यहाँ देख सकते हैं


लेकिन ऊपर दिए गए कोड के बारे में जावा में क्या किया गया है? यह प्रत्येक ब्राउज़र को वर्तमान निहित वेबसाइट के प्रमाण पत्र को स्वीकार करने के लिए कह रहा है। क्या हम पायथन में भी ऐसा नहीं कर सकते?
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.