2016-09-22 141 views
3

考慮到這些節點的依賴性:如何讓selenium-webdriver忽略Firefox和PhantomJS中的SSL錯誤?

{ 
    "chromedriver": "^2.24.1", 
    "cucumber": "^1.3.0", 
    "geckodriver": "^1.1.2", 
    "phantomjs-prebuilt": "^2.1.12", 
    "selenium-webdriver": "^3.0.0-beta-2" 
} 

我想PhantomJS和Firefox忽略SSL證書。以下是我的browser.js的外觀:

require('geckodriver'); 

// main browser object 
var browserHandle; 

// load selenium webdriver and some rules 
var webdriver = require('selenium-webdriver'), 
    By = webdriver.By, 
    until = webdriver.until; 

// load phantomjs into webdriver capabilities 
var phantomjs_exe = require('phantomjs-prebuilt').path; 
var customPhantom = webdriver.Capabilities.phantomjs(); 
customPhantom.set("phantomjs.binary.path", phantomjs_exe); 

webdriver.Builder() 
    //.forBrowser('firefox') 
    //.forBrowser('phantomjs') 
    .withCapabilities(customPhantom) 
    .build(); 

任何建議與--ignore-ssl-errors=yes?我如何在代碼中實現它?我只想使用JavaScript,而不是Java。

回答

6

這僅適用於Javascript/Node.js Selenium Webdriverjs的情況,僅限於MacOS解決方案。

  1. Firefox的情況下:

    一個。使用Profile Manager for Firefox設置新的配置文件。

    • 打開配置文件管理器與/Applications/Firefox.app/Contents/MacOS/firefox-bin -P-profilemanager,該作品,以及)
    • 單擊「創建配置文件」
    • 在創作的第二個步驟,則顯示的路徑配置文件。複製它!

    b。添加ffprofile文件

    • 轉到功能/支持
    • 添加一個新的文件 「ffprofile.json」
    • 加{ 「ffprofile」: 「<profilePath>」}的文件,其中<profilePath>是你的路徑複製於a.

    c。您的本地系統/Applications/Firefox.app/Contents/MacOS/firefox-bin -P

  2. 再次添加到配置文件

    • 打開配置文件管理器中選擇新的配置文件,點擊「啓動Firefox」
    • 在瀏覽器中,轉到您https://...。你會看到一個頁面,告訴你有一個與「高級」證書
    • 點擊一個問題 - >「添加例外」 - >「確認安全例外」

    d。這種添加到您的browser.js或者你編程方式調用瀏覽器:

    var webdriver = require('selenium-webdriver'), 
    firefox = require('selenium-webdriver/firefox'), 
    
    var ffProfileFile = require('./ffprofile'); 
    var ffProfile = new firefox.Profile(ffProfileFile['ffprofile']); 
    var ffOptions = new firefox.Options().setProfile(ffProfile); 
    
    return browserHandle = new firefox.Driver(ffOptions); 
    
  3. Phantomjs情況下(我有兩個解決方案,在這裏,拿起其中一個對你來說是更好的):

    溶液1 :

    var webdriver = require('selenium-webdriver'), 
    phantom = require('phantomjs-prebuilt'); 
    
    var 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"] 
           ); 
    return browserHandle = new webdriver 
    .Builder() 
    .withCapabilities(capabilities) 
    .build(); 
    

    溶液2:

    var webdriver = require('selenium-webdriver'), 
    phantom = require('phantomjs-prebuilt'); 
    
    var capabilities = { 
        'browserName' : 'phantomjs', 
        'phantomjs.cli.args': ['--ignore-ssl-errors=true', 
         '--ssl-protocol=any', '--web-security=false'] 
    } 
    return browserHandle = new webdriver 
    .Builder() 
    .withCapabilities(capabilities) 
    .build(); 
    

    對於這一個'phantomjs.cli.args': ['--ignore-ssl-errors=true']爲我做了這份工作。

希望它對你有用。

+0

超好用感謝 –

+0

僅供參考,我發現,這是足夠寫'capabilities.set( 「phantomjs.cli.args」,[「 - -ignore-ssl-errors = yes「]);'讓PhantomJS加載一個不受信任的證書。 – Chris

+0

@Chris真棒 – 6axter82

1

對於Firefox,你可以使用下面的代碼:

var driver = new webdriver.Builder().withCapabilities(Capabilities.firefox() 
.set("acceptInsecureCerts", true)).build(); 
+0

這是我需要設置的唯一標誌,以便在Mac OS X v10.12.6上修復SEC_ERROR_UNKNOWN_ISSUER錯誤,使用selenium-driver v3.6.0和geckodriver v0.19.1 – b01