2016-09-22 140 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