Установка Selenium, Chrome, JavaScript на CentOS 7

Author Автор: Роман Чернышов    Опубликовано: 26 ноября 2022

Автоматизация с SeleniumДоброго времени друзья! Последние несколько месяцев были насыщены проектами, многие из которых так или иначе были связаны с темой автоматизации процессов, начиная от парсинга сайтов и завершая сложными алгоритмами работы с CRM. Так совпало, что я автоматизировал как множество бизнес-задач клиентов, так и задач в ряде своих проектов. Многая часть таких процессов, была автоматизирована за счет инструмента Selenium(позволяющего управлять браузером, автоматически), языка Node.JS(JavaScript, позволяющего описать все процессы), браузера Chrome(выступающим в качестве основного веб-обозревателя) и операционной системы CentOS 7(стабильная, легкая и актуальная версия Linux) — всё это, позволило достаточно быстро развернуть рабочий сервер и приступить к сути, а именно написанию кода автоматизации самих процессов. Эта статья, является краткой инструкцией по установке и базовой настройке всех необходимых компонентов для работы (при условии, что сервер и ОС у вас уже готовы).

Установка Node.js

Добавляем репозиторий.

$ curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash -

Выполняем следующую команду

$ sudo yum install nodejs

Проверяем установленную версию Node.js и npm, выполнив поочередно команды:

$ node --version
$ npm --version

Установка Selenium library

Для работы с Selenium из скриптов на JavaScript Node.js, устанавливаем соответствующую библиотеку:

$ npm install selenium-webdriver

Установка Chrome

$ curl https://intoli.com/install-google-chrome.sh | bash
$ sudo yum install google-chrome-stable

Проверка установленной версии браузера

$ google-chrome --version

Видим следующее:

Google Chrome 104.0.5112.101

Установка Browser Driver

Следовательно скачиваем и устанавливаем Browser driver именно для этой версии браузера.

Выполняем команду:

$ wget https://chromedriver.storage.googleapis.com/104.0.5112.79/chromedriver_linux64.zip

Далее распаковываем архив:

$ unzip chromedriver_linux64.zip

Копируем драйвер в папку /usr/bin/:

$ cp ./chromedriver /usr/bin/chromedriver

Проверяем корректно ли он установился:

$ chromedriver

Видим следующее:

Starting ChromeDriver 104.0.5112.79 on port 9515
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.

Первый скрипт на Node.JS и его запуск

Создаем файл test.js со следующим содержимым:

const {Builder} = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
 
(async function helloSelenium() {
    let options = new chrome.Options();
 
    // Задаем настройки для браузера
    options.addArguments("--no-sandbox");
    options.addArguments("--disable-dev-shm-usage");
    options.addArguments('--headless');
    options.addArguments('--unhandled-rejections=strict');
 
    try {
 
	// Запускаем сессию
	let driver = await new Builder().setChromeOptions(options).forBrowser('chrome').build();
 
	// Открываем веб-страницу
	await driver.get('https://rche.ru');
 
	// Получаем заголовок веб-страницы
	let title = await driver.getTitle();
 
	// Закрываем сессию
	await driver.quit();
 
	// Выводим заголовок веб-страницы в консоль
	console.log(title);
 
    } catch(e) {
 
	// Сообщение об ошибке, в случае падения
    	console.log(e);
    }
 
})();

Запускаем скрипт используя Node.js:

$ node test.js

В консоли видим заголовок веб-страницы

Еще больше команд для написания скрипта для Selenium тут.

Работа Chrome через прокси

В JavaScripe, в блоке кода перечня настроек браузера, добавим строку подключения плагина:

    // Задаем настройки для браузера
    options.addExtensions("chrome_plugin_proxy.zip"); // !!! Плагин устанавливающий прокси

Сам архив с плагином chrome_plugin_proxy.zip будет содержать два файла: background.js и manifest.json

Листинг файлов следующий:
background.js — Код плагина. Не забудьте прописать в коде, параметры подключения к прокси: IP(XXX.XXX.XXX.XXX), Порт(YYYY), логин(USERNAME) и пароль(PASSWORD).

var config = {
	mode: "fixed_servers",
	rules: {
		singleProxy: {
			scheme: "http",
			host: "XXX.XXX.XXX.XXX",
			port: YYYY
		},
	bypassList: ["foobar.com"]
	}
};
 
chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});
chrome.webRequest.onAuthRequired.addListener(
    function(details, callbackFn) {
        console.log("onAuthRequired!", details, callbackFn);
        callbackFn({
            authCredentials: {username: "USERNAME", password: "PASSWORD"}
        });
    },
    {urls: ["<all_urls>"]},
    ['asyncBlocking'] // blocking, asyncBlocking
);

manifest.json — Файл конфигурации плагина.

{
"version": "1.0.0",
"manifest_version": 2,
"name": "Chrome Proxy v2",
"permissions": [
	"proxy",
	"tabs",
	"unlimitedStorage",
	"storage",
	"<all_urls>",
	"webRequest",
	"webRequestBlocking"
],
"background": {
	"scripts": ["background.js"]
},
"minimum_chrome_version":"76.0.0"
}

Возможные ошибки

Error: Server terminated early with status 2

UnhandledPromiseRejectionWarning: WebDriverError: unknown error: Chrome failed to start: exited abnormally.
(unknown error: DevToolsActivePort file doesn’t exist)

ReferenceError: after is not defined

Проверьте установлен ли Browser Driver, а также сам Chrome.

Заключение

Вышеописанная связка операционной системы, набора приложений и инструментов, получилась очень стабильной, экономичной в ресурсах и быстрой в скорости работы. На одном выделенном сервере на базе i7 7700k, 32 GB RAM, удалось одномоментно запустить до 30 параллельных потоков Selenium, с разными скриптами автоматизации. Результат просто шикарный!

Друзья, если вам необходима помощь в написании скриптов автоматизации процессов, пожалуйста обращайтесь, буду рад сотрудничеству!

Оставить комментарий

Автор блога
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Купить за 159₽
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка