Может Node.js вызвать Chrome?

#google-chrome #node.js

#google-chrome #node.js

Вопрос:

Возможно ли это для Node.js запуск на рабочем столе для создания окна браузера Chrome? Я хотел бы запустить браузер Chrome, указав размер окна и местоположение, когда Node.js получает событие.

Являются ли команды sys shell только методологией?

Комментарии:

1. На какой ОС вы хотели бы запустить Chrome?

2. defectracker.com/2019/08/28 / … взгляните на этот пост с примером node.js проект

Ответ №1:

На MacOSX

 var childProc = require('child_process');
childProc.exec('open -a "Google Chrome" http://your_url', callback);
//Or could be: childProc.exec('open -a firefox http://your_url', callback);
  

Еще немного:

Ответ №2:

Оформить заказ https://www.npmjs.com/package/chrome-launcher:

Запустите chrome:

 const chromeLauncher = require('chrome-launcher');

chromeLauncher.launch({
  startingUrl: 'https://google.com'
}).then(chrome => {
  console.log(`Chrome debugging port running on ${chrome.port}`);
});
  

Запуск безголового Chrome:

 const chromeLauncher = require('chrome-launcher');

chromeLauncher.launch({
  startingUrl: 'https://google.com',
  chromeFlags: ['--headless', '--disable-gpu']
}).then(chrome => {
  console.log(`Chrome debugging port running on ${chrome.port}`);
});
  

chrome-launcher открывает порт удаленной отладки, поэтому вы также можете управлять экземпляром браузера с помощью протокола DevTools.

Puppeteer — это еще один способ запустить Chrome и взаимодействовать с ним, используя высокоуровневые API.

Комментарии:

1. Я не смог запустить Chrome без заголовка, используя localhost-url, и мне пришлось добавить --no-sandbox (см.: Github-Проблема )

2. спасибо @ebidel за запрет Puppeteer

Ответ №3:

С opn:

 const opn = require('opn');
opn('http://siteurl.com/', {app: ['google chrome']});
  

Комментарии:

1. opn устарел и переименован в new как ‘open’

2. «opn» изменил имена на «открыть» npmjs.com/package/open Это намного лучше для моего варианта использования, потому что это просто открывает новую вкладку вместо создания нового экземпляра Chrome без авторизованного пользователя Chrome. Это более реально и лучше для разработчиков, потому что именно так пользователи фактически заходят на ваш веб-сайт (сохраняя кэш, cookies, localStorage и т.д.).

Ответ №4:

Я открываю новую вкладку Firefox в Windows здесь:https://github.com/Sequoia/FTWin/blob/master/FTWin.n.js

Наиболее заметная часть:

 var cp = require('child_process'),
    url_to_open = 'http://duckduckgo.com/';

cp.spawn('c:\Program Files (x86)\Mozilla Firefox\firefox.exe', ['-new-tab', url_to_open]);
  

Примечание:

  1. Передаю полный путь к firefox в child_process.spawn
  2. Экранирование косых черт
  3. Передача переключателей / аргументов в firefox.exe: передается в качестве второго параметра cp.spawn в виде массива (по одной записи на коммутатор).

Этот вызов эквивалентен вводу "c:Program Files (x86)Mozilla Firefoxfirefox.exe" -new-tab http://duckduckgo.com в командной строке Windows.

Для chrome вам нужно что-то вроде D:UserssequoiaAppDataLocalGoogleChromeApplicationchrome.exe --new-tab http://duckduckgo.com/ Я позволю вам самостоятельно разработать версию child_process 😉

Ссылки:

http://peter.sh/experiments/chromium-command-line-switches/

http://nodejs.org/docs/v0.3.1/api/child_processes.html

Комментарии:

1. Для запуска браузера Chrome с опциями в Windows я пытался, cp.spawn('c:\Program Files (x86)\Google\Chrome\Application\chrome.exe' , [ '--user-data-dir','C:chrome-path' ] кажется ‘C:chrome-path ‘ в этом случае рассматривается как URL. Есть идеи по устранению этой проблемы? Спасибо!

2. попробуйте ['--user-data-dir=C:chrome-path'] ? Или заключите в кавычки [ '--user-data-dir','"C:chrome-path"' ] или попробуйте избежать косой черты [ '--user-data-dir','C:\chrome-path' ] . Удачи!

Ответ №5:

Да, я бы подумал, что вам нужно будет выйти в shell, а затем открыть chrome.

Ответ №6:

Узел может это сделать, только если вы вызываете команду UNIX / Windows, поэтому только команду sys shell.

Ответ №7:

Это можно сделать с помощью открытого пакета npm.

 app.listen(PORT, (err) => {
  if (err) console.log(err);
  else open(`http://localhost:${PORT}`, { app: "google chrome" });
});
  

Мы можем указать любой браузер во втором параметре с функцией open.

Ответ №8:


Этот ответ не поможет, если вам нужна сохраненная информация chrome или chrome как таковой.

https://github.com/puppeteer/puppeteer
https://www.npmjs.com/package/puppeteer

В любом случае, когда вам явно не нужна предыдущая локально сохраненная информация, я предлагаю использовать экземпляр puppeteer. Он охватывает все ресурсы браузера, такие как хранилища и т. Д

Ответ №9:

 var exec = require('child_process').exec

exec('open firefox www.google.pt' , function(err) {
if(err){ //process error
}

else{ console.log("success open")
}

})
  

Это открывает firefox на странице Google из скрипта nodejs, для chrome должно быть то же самое

Комментарии:

1. ‘open chrome’ ничего не делает на моем Mac OSX 10.8.2 (очевидно, с установленным chrome)

2. в Windows exec('start chrome www.google.com', function (err) {

3. Не уверен, как был принят этот ответ… Я предполагал, что это работает на Mac (конечно, не на Windows или Linux), но комментарии указывают, что это не так. На какой платформе это действительно работает?

4. Я не настолько знаком с OS X, но я думаю, что -a флаг необходим для открытия приложения с помощью open команды.

5. Не голосовал против, потому что это была правильная идея, но более конкретная помогла бы. Для mac OS MaxRD сделал свое дело за меня