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

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

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

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

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

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

14 ответов

13 просмотров

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

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

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта