Headless automation with Nodejs Selenium Webdriver

烂漫一生 提交于 2020-05-09 18:06:12

问题


I am working with an automation tool which has to be deployed inside an ubuntu server, my wonder is if is possible to use chrome in a silent way with Selenium Webdriver.

I've tried the following code so far, but it keeps opening the browser (I'm doing the tests in a Windows 10):

    var webdriver = require('selenium-webdriver'),
        chrome    = require('selenium-webdriver/chrome')
        By        = webdriver.By,
        until     = webdriver.until,
        options   = new chrome.Options();
        options.addArguments('--headless');
    var path = require('chromedriver').path;
    var service = new chrome.ServiceBuilder(path).build();
        chrome.setDefaultService(service);
    var driver = new webdriver.Builder().forBrowser('chrome').withCapabilities(options.toCapabilities()).build();

driver.get('https://www.google.com');

Note that the addArguments('--headless') is the parameter that should make the navigation silent, but apparently it's not working or I am missing something I am not aware of.

If there is something I am missing, please tell me because I don't know if what I want to do is possible, as It is the frist time I work with this kind of technology.

Thanks.


回答1:


Updated answer circa FEB-2018.

Referencing the Selenium Webdriver NodeJS Examples (commit 5bf50c4)

const chrome = require('selenium-webdriver/chrome');
const firefox = require('selenium-webdriver/firefox');
const {Builder, By, Key, until} = require('selenium-webdriver');

const screen = {
  width: 640,
  height: 480
};

let driver = new Builder()
    .forBrowser('chrome')
    .setChromeOptions(new chrome.Options().headless().windowSize(screen))
    .setFirefoxOptions(new firefox.Options().headless().windowSize(screen))
    .build();

Headless Chrome available since major version 59.0 APR-2017

Headless Firefox available since major version 56.0 SEP-2017




回答2:


Try this one:

var webdriver = require('selenium-webdriver'),
    chrome    = require('selenium-webdriver/chrome')
    By        = webdriver.By,
    until     = webdriver.until,
    options   = new chrome.Options();
    options.addArguments('headless'); // note: without dashes
    options.addArguments('disable-gpu')
var path = require('chromedriver').path;
var service = new chrome.ServiceBuilder(path).build();
    chrome.setDefaultService(service);
var driver = new webdriver.Builder()
    .forBrowser('chrome')
    .withCapabilities(webdriver.Capabilities.chrome()) 
    .setChromeOptions(options)                         // note this
    .build();

driver.get('https://www.google.com');



回答3:


Unfortunately the headless() method does not exist any more in Webdriver JS.

Use

const seleniumWebdriver = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');

var driver = new Builder().forBrowser('chrome')
            .setChromeOptions(new chrome.Options().addArguments('--headless'))
            .build();

instead.




回答4:


To start Chrome in headless mode, simply call Options.headless(). Starting in headless mode currently also disables GPU acceleration. This is the code:

  var seleniumWebdriver = require('selenium-webdriver');
  var chrome    = require('selenium-webdriver/chrome');

  var options   = new chrome.Options().headless();

  var driver = new seleniumWebdriver.Builder()
    .forBrowser('chrome')
    .setChromeOptions(options)
    .build();

Note: For security, Chrome disables downloads by default when in headless mode. You may call setDownloadPath to re-enable downloads.



来源:https://stackoverflow.com/questions/44197253/headless-automation-with-nodejs-selenium-webdriver

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!