使用 Nodejs Selenium Webdriver 实现无头自动化

问题描述 投票:0回答:4

我正在使用一个自动化工具,该工具必须部署在 ubuntu 服务器内,我想知道是否可以通过 Selenium Webdriver 以静默方式使用 chrome。

到目前为止,我已经尝试过以下代码,但它不断打开浏览器(我正在 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');

请注意,addArguments('--headless') 是应该使导航静音的参数,但显然它不起作用,或者我遗漏了一些我不知道的东西。

如果我缺少什么,请告诉我,因为我不知道我想做的事情是否可能,因为这是我第一次使用这种技术。

谢谢。

node.js selenium-webdriver headless-browser
4个回答
71
投票

2018 年 2 月左右更新了答案。

参考 Selenium Webdriver NodeJS 示例(提交

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().addArguments('--headless').windowSize(screen))
    .setFirefoxOptions(new firefox.Options().addArguments('--headless').windowSize(screen))
    .build();

Headless Chrome 自 主要版本 59.0 APR-2017 起可用

Headless Firefox 自 主要版本 56.0 2017 年 9 月起可用


12
投票

试试这个:

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');

10
投票

不幸的是,Webdriver JS 中不再存在 headless() 方法。

使用

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

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

相反。


2
投票

要以无头模式启动 Chrome,只需调用

Options.headless()
。当前以无头模式启动也会禁用 GPU 加速。这是代码:

  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();

注意:为了安全起见,Chrome 在无头模式下默认禁用下载。您可以拨打

setDownloadPath
重新启用下载。

© www.soinside.com 2019 - 2024. All rights reserved.