Selenium на Ubuntu 20

Нужно установить бота с Selenium на Ubuntu сервер TimeWeb

Мне в целом как новичку довольно тяжело работать с консолью, выучила один алгоритм отправки бота на сервер работать, придерживаюсь его и вправо и лево не двигаюсь, сам алгоритм заключается в:

  1. Через Termius загружаю файлы по работе с ботом в папку bot, которая находится в папке root

  2. Устанавливаю все библиотеки, которые устанавливала также на локальной машине: aiogram, selenium, selenium_stealth

  3. В system пишу сервис, который запускает моего бота работать 24/7, его код:

[Service]
WorkingDirectory=/root/test_bot/
User=root
ExecStart=/usr/bin/python3 main.py

[Install]
WantedBy=multi-user.target
  1. После запускаю его с помощью systemctl enable service, а затем start service

Этих команд всегда хватало, чтобы бот без проблем работал, но с Selenium появляются ошибки, я их гуглила, находила разные решения, пыталась применять, натыкалась на новые

Пример: Если также через Termius закинуть в папку с файлами бота chromedriver.exe, указать путь на него в скрипте, то печатается:

Message: 'chromedriver.exe' executable needs to be in PATH.

Такая ошибка появляется при наличии EXE_PATH, при его отсутствии, а также при наличии Service и EXE_PATH вместе.

Также пробовала устанавливать chromedriver с помощью sudo apt install chromium-chromedriver, меняла путь на /usr/lib/chromium-browser/chromedriver, ошибка аналогична той, что описывала выше, но если оставляю chromedriver (без .exe), то ошибка:

The process started from chrome location /snap/chromium/2064/usr/lib/chromium-browser/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed

При выполнении oogle-chrome --version, получаю:

google-chrome: command not found

Ниже код, который запускаю в качестве тестового, я запускаю его у себя на локальной машине MAC, все работает

from aiogram import executor
from aiogram.types import Message
from aiogram import Dispatcher, Bot

TOKEN_TEST = 'token'

bot = Bot(token=TOKEN_TEST)
dp = Dispatcher(bot)

import json
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium_stealth import stealth
from selenium.webdriver.common.by import By
import time

service = Service(r'/путь до chromedriver.exe') 

def get_source_list(id, options):
    url = f'https://www.goat.com/web-api/v1/product_variants/buy_bar_data?productTemplateId={id}&countryCode=RU'
    n=[]
    options.add_argument("--headless")
    driver = webdriver.Chrome(options=options, service=service)
    driver.maximize_window()
    stealth(driver,
        languages=["en-US", "en"],
        vendor="Google Inc.",
        platform="Win32",
        webgl_vendor="Intel Inc.",
        renderer="Intel Iris OpenGL Engine",
        fix_hairline=True,
        )
    try:
        driver.get(url=url)
        time.sleep(4)
        text_elements = driver.find_element(by=By.TAG_NAME, value="pre").text
        list_size = json.loads(text_elements)
    except Exception as _ex:
        print(_ex)
    finally:
        driver.close()
        driver.quit()
    return list_size

@dp.message_handler(commands=['start'])
async def command_start(message: Message):
    options = webdriver.ChromeOptions()
    options.add_argument("--headless")
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)

    data = get_source_list('950107', options)
    print('len ---->', len(data))

if __name__ == '__main__':
    executor.start_polling(dp)

Заранее огромное спасибо!


Ответы (2 шт):

Автор решения: Anna Velichko

Не без помощи, но смогла разобраться с тем, как установить бота с Selenium на VDS Ubuntu 20

  1. Необходимо установить на сервер сам Chrome и Chromedriver, не буду расписывать шаги текстом, я это делала по данному видео: https://www.youtube.com/watch?v=Jw9Gar_vcHY

  2. После нужно закинуть на сервер свои рабочие файлы (я использую для этого программу Termius), тут важно учесть некоторые детали: файлы проекта не должны лежать в root, иначе chrome не будет запускать что-то у себя => не будет работать все должным образом (не знаю, почему так, но такой ответ находила + у меня тоже в root не запускается) Поместила свой проект в

home/bot/
  1. То, чего не было у меня в коде: useragent, без него не запускается selenium корректно, необходимо добавить:
options.add_argument("user-agent='your-useragent'")
  1. После всех проделанных операций, запустила для теста код отсюда: https://qna.habr.com/q/864821, но добавив useragent и заменив на свою ссылку

UPD: когда на другой сервер ставила Selenium, поняла, что без завершающей команды не работает, это финальный штрих:

sudo apt install chromium-chromedriver

Все работает корректно на 31.08.22

→ Ссылка
Автор решения: Илья Юрин

Все устаревает очень быстро. Появился менеджер в Selenium.Актуальный алгоритм - https://github.com/password123456/setup-selenium-with-chrome-driver-on-ubuntu_debian

→ Ссылка