webentwicklung-frage-antwort-db.com.de

Kopflose Automatisierung mit Nodejs Selenium Webdriver

Ich arbeite mit einem Automatisierungstool, das in einem Ubuntu-Server implementiert werden muss. Ich frage mich, ob es möglich ist, Chrome mit dem Selenium Webdriver leise zu verwenden.

Ich habe den folgenden Code bisher ausprobiert, der Browser wird jedoch weiterhin geöffnet (ich mache die Tests in 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');

Beachten Sie, dass addArguments ('- headless') der Parameter ist, der die Navigation stummschalten soll, aber anscheinend funktioniert sie nicht oder ich vermisse etwas, das mir nicht bewusst ist.

Wenn etwas fehlt, was ich vermisse, sagen Sie mir bitte, denn ich weiß nicht, ob das möglich ist, da ich zum ersten Mal mit dieser Art von Technologie arbeite.

Vielen Dank.

7
avilac

Antwort aktualisiert ca. FEB-2018. 

Referenzieren der Selenium Webdriver NodeJS-Beispiele (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 verfügbar seit Hauptversion 59.0 APR-2017

Headless Firefox verfügbar seit Hauptversion 56.0 SEP-2017

16
Josh Peak

Probier diese:

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');
4
Matti Lehtinen

Leider existiert die Methode headless () in Webdriver JS nicht mehr.

Benutzen

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

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

stattdessen.

1
cyluxx

Um Chrome im Headless-Modus zu starten, rufen Sie einfach Options.headless() auf. Beim Start im Headless-Modus wird derzeit auch die GPU-Beschleunigung deaktiviert. Dies ist der 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();

Hinweis: Aus Sicherheitsgründen deaktiviert Chrome standardmäßig Downloads im Headless-Modus. Sie können setDownloadPath aufrufen, um Downloads erneut zu aktivieren.

0
Jai Prak