Selenium на Ubuntu 20
Нужно установить бота с Selenium на Ubuntu сервер TimeWeb
Мне в целом как новичку довольно тяжело работать с консолью, выучила один алгоритм отправки бота на сервер работать, придерживаюсь его и вправо и лево не двигаюсь, сам алгоритм заключается в:
Через Termius загружаю файлы по работе с ботом в папку bot, которая находится в папке root
Устанавливаю все библиотеки, которые устанавливала также на локальной машине: aiogram, selenium, selenium_stealth
В system пишу сервис, который запускает моего бота работать 24/7, его код:
[Service]
WorkingDirectory=/root/test_bot/
User=root
ExecStart=/usr/bin/python3 main.py
[Install]
WantedBy=multi-user.target
- После запускаю его с помощью 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 шт):
Не без помощи, но смогла разобраться с тем, как установить бота с Selenium на VDS Ubuntu 20
Необходимо установить на сервер сам Chrome и Chromedriver, не буду расписывать шаги текстом, я это делала по данному видео: https://www.youtube.com/watch?v=Jw9Gar_vcHY
После нужно закинуть на сервер свои рабочие файлы (я использую для этого программу Termius), тут важно учесть некоторые детали: файлы проекта не должны лежать в root, иначе chrome не будет запускать что-то у себя => не будет работать все должным образом (не знаю, почему так, но такой ответ находила + у меня тоже в root не запускается) Поместила свой проект в
home/bot/
- То, чего не было у меня в коде: useragent, без него не запускается selenium корректно, необходимо добавить:
options.add_argument("user-agent='your-useragent'")
- После всех проделанных операций, запустила для теста код отсюда: 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