Как решить проблему профиля в 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?

Вернуться на верх