170 похожих чатов

Всем привет. Подскажите как можно расширить модуль (selenium), добавив к

нему собственный метод?

Я отказался от варианта добавить метод в исходники, т.к. при переустановке он не сохранится.

Сейчас я делаю так:
1) Создал файл classes2) Импортировал в файл classes модуль selenium3) Создал класс в файле classes унаследовав его от selenium4) Добавил свой метод в созданный класс
5) импортировал файл classes в основной файл main, используя везде его вместо оригинального модуля

Правильной ли стратегии я придерживаюсь?

14 ответов

11 просмотров

Вполне правильно)

David-Shiko Автор вопроса
Shawn 🥟
Вполне правильно)

А нужно init прописывать или super ?

David Shiko
А нужно init прописывать или super ?

Только есть одна фишка, которую нужно соблюсти. Следует наследовать какой-то конкретный класс (Chrome, Firefox и тд), а не webdriver

David Shiko
А нужно init прописывать или super ?

И еще в super().init() желательно подать аргументы, для хрома, хромдрайвера и тд

David-Shiko Автор вопроса
Shawn 🥟
Только есть одна фишка, которую нужно соблюсти. Сл...

Т.е. весь код выглядит так?: код класса: class webdriver_with_my_class(webdriver.Firefox): def __init__(self, delay=3, located_by=None, elem_name=None, find_all=False): super().__init__() self.delay = delay self.located_by = located_by self.elem_name = elem_name self.find_all = find_all def wait_find(self): WebDriverWait(self, self.delay).until( EC.presence_of_element_located((self.located_by, self.elem_name))) return self.find_elements(self.located_by, self.elem_name) if self.find_all else self.find_element( self.located_by, self.elem_name) код создания драйвера from classes import webdriver_with_my_class driver = webdriver_with_my_class.Firefox(executable_path='geckodriver')

David Shiko
Т.е. весь код выглядит так?: код класса: class we...

если родительскому конструктору ничего передавать не надо, то да, примерно так

David Shiko
Т.е. весь код выглядит так?: код класса: class we...

Почти, еще нужно передать в super().init() аргументы, которые были в классе webdriver.Firefox, Вот init() класса Firefox: def __init__(self, firefox_profile=None, firefox_binary=None, timeout=30, capabilities=None, proxy=None, executable_path="geckodriver", options=None, service_log_path="geckodriver.log", firefox_options=None, service_args=None, desired_capabilities=None, log_path=None, keep_alive=True):

David Shiko
Т.е. весь код выглядит так?: код класса: class we...

если что-то из self.<что-то там> = <что-то там> трогает что-то из родительского, то лучше это сделать через передачу аргументов родительскому конструктору или вызов родительских функций, что есть из возможного

David-Shiko Автор вопроса
Shawn 🥟
Только есть одна фишка, которую нужно соблюсти. Сл...

А можно просто webdriver наследовать? Иначе параметров уйму передавать нужно. Плюс получается относительно неявное создание драйвера. Я хочу сделать свой метод равнозначным методу find_by_id например, т.е. на 1-м уровне, 1-ой вложенности и т.п. В исходниках же не создается драйвер для создания метода find_by_id (как я понимаю)

David Shiko
А можно просто webdriver наследовать? Иначе параме...

Точно не знаю, но скорее всего нет, тк у этих классов разные конструкторы.

David-Shiko Автор вопроса
Shawn 🥟
Без костылей не получится)

Возникла неожиданная проблема, как мне создавать драйвер нормальным способом, а не новым новый: driver = webdriver_with_my_class(executable_path='geckodriver')Нормальный: driver = webdriver.Firefox(executable_path='geckodriver') # Firefox

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта