问题
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