Как решить проблему профиля в docker с помощью автономного селениума chrome?
Друзья. Разрабатываю продакшн с использованием selenium на моем django сайте. BS4 и LXML не подходят для моих действий, так как мне нужно работать именно добавляя js в код, нажимая на кнопки и т.д. Поэтому я обратил свой взор на selenium. Но, под Windows все хорошо, я понимаю. Но теперь возникли проблемы в docker. Я установил selenium standalone chrome, и самое главное, мне не нужен headless mode, так как мне нужно одно рабочее расширение с выполнением большого js скрипта, который будет добавлять мне кнопки, которые не видны для загрузки файлов. Итак, как мне добавить профиль в контейнер docker, установить расширение templermonkey, установить туда скрипт и заставить все работать в контейнере без headless mode. Я гуглил этот вопрос 2 дня, из решений ничего не нашел, все либо показывают примеры без профиля в docker из chrome standalone. Мне нужно добавить профиль, загрузить в него расширение и скрипт. Затем работать с парсингом.
from selenium import webdriver
import time
from django.core.management import BaseCommand
class ChromeWorker:
options = webdriver.ChromeOptions()
#options.add_argument('--headles')
options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 Edg/92.0.902.84')
options.add_argument('user-data-dir=chrome-data/chromeuser')
driver = webdriver.Remote("http://chrome:4444/wd/hub", options=options)
def start_worker(self):
url = 'https://steamcommunity.com/sharedfiles/filedetails/?id=1161902443'
try:
self.driver.get(url=url)
print('Перемещение на страницу')
time.sleep(10)
self.driver.find_element_by_id('downloadWorkshopItemButton').click()
print('Кликаем по кнопке')
time.sleep(5)
print('Ждем мод...')
time.sleep(40)
except Exception as ex:
print(ex)
finally:
self.driver.close()
self.driver.quit()
class Command(BaseCommand):
help = 'Selenium starting...'
def handle(self, *args, **options):
p = ChromeWorker()
p.start_worker()from selenium import webdriver
import time
from django.core.management import BaseCommand
class ChromeWorker:
options = webdriver.ChromeOptions()
#options.add_argument('--headles')
options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 Edg/92.0.902.84')
options.add_argument('user-data-dir=chrome-data/chromeuser')
driver = webdriver.Remote("http://chrome:4444/wd/hub", options=options)
def start_worker(self):
url = 'https://steamcommunity.com/sharedfiles/filedetails/?id=1161902443'
try:
self.driver.get(url=url)
print('Перемещение на страницу')
time.sleep(10)
self.driver.find_element_by_id('downloadWorkshopItemButton').click()
print('Кликаем по кнопке')
time.sleep(5)
print('Ждем мод...')
time.sleep(40)
except Exception as ex:
print(ex)
finally:
self.driver.close()
self.driver.quit()
class Command(BaseCommand):
help = 'Selenium starting...'
def handle(self, *args, **options):
p = ChromeWorker()
p.start_worker()
Это мой код, кнопка downloadWorkshopItemButton доступна только через расширение.
Но когда я запускаю свой профиль, скопированный в контейнер docker, я получаю ошибку
Может быть, есть более простой режим запуска внутри того же контейнера django, без особых проблем, с установленным chromedriver и без headless mode?