Как добавить аргументы расширения webdriver в super() в python selenium?

#python #selenium

Вопрос:

Я попытался добавить расширение chrome при открытии chrome webdriver в python.

OK.py

 from selenium import webdriver
from selenium.webdriver.chrome.options import Options

extension_path = r'C:/Users/path/to/extension'

chrome_options = Options()
chrome_options.add_argument('load-extension='   extension_path)
chrome_options.add_argument("--disable-notifications")
chrome_options.add_argument("--disable-infobars")

browser = webdriver.Chrome(executable_path=r'C:/Users/path/to/chromedriver.exe', options = chrome_options)
 

Коды работают нормально, и расширение было представлено. Однако, когда я разделяюсь на 2 файла и использую классы.

variables.py

 from selenium.webdriver.chrome.options import Options

driver_path = r'C:/Users/path/to/chromedriver.exe'
extension_path = r'C:/Users/path/to/extension'

chrome_options = Options()
chrome_options.add_argument('load-extension='   extension_path)
chrome_options.add_argument("--disable-notifications")
chrome_options.add_argument("--disable-infobars")
 

broken.py

 import variables as vb
from selenium import webdriver

class nokair(webdriver.Chrome):
    def __init__(self, executable_path = vb.driver_path, options = vb.chrome_options):
        self.driver_path = executable_path
        self.options = options
        super().__init__()

init = nokair()
 

При запуске веб-драйвер был выполнен без какого-либо расширения. Я пробовал другие обходные пути

 import variables as vb
from selenium import webdriver

class nokair(webdriver.Chrome):
    def __init__(self, executable_path = vb.driver_path, options = vb.chrome_options):
        self.driver_path = executable_path
        self.options = options
        super().__init__(executable_path, options)

init = nokair()
 

Это привело к ошибке. Что я сделал не так?

 Traceback (most recent call last):
  File "c:UsersKittinunDesktopVS workspacePlaygroundFlightnokair.py", line 93, in <module>
    nok = nokair()
  File "c:UsersKittinunDesktopVS workspacePlaygroundFlightnokair.py", line 14, in __init__
    super(nokair, self).__init__(executable_path, options)
  File "C:ProgramDataMiniconda3libsite-packagesseleniumwebdriverchromewebdriver.py", line 73, in __init__
    self.service.start()
  File "C:ProgramDataMiniconda3libsite-packagesseleniumwebdrivercommonservice.py", line 71, in start
    cmd.extend(self.command_line_args())
  File "C:ProgramDataMiniconda3libsite-packagesseleniumwebdriverchromeservice.py", line 45, in command_line_args
    return ["--port=%d" % self.port]   self.service_args
TypeError: %d format: a number is required, not Options
 

Комментарии:

1. О какой ошибке сообщается в последнем случае?

2. Я только что добавил ошибку в вопрос 🙂

Ответ №1:

broken.py не работает , потому что в нем нет options поля webdriver.Chrome , следовательно, он не используется этим драйвером.

Последний случай не работает, потому что вы не используете именованные параметры, которые заставляют Python назначать их последовательно. Вторым параметром конструктора является port . Но вы переходите Options к этому.

Работоспособный код был бы

 import variables as vb
from selenium import webdriver

class nokair(webdriver.Chrome):
    def __init__(self):
        super().__init__(executable_path=vb.driver_path, options=vb.chrome_options)

init = nokair()
 

В моем примере я оставил nokair конструктор без какого-либо параметра, чтобы упростить вещи и не перепутать имена параметров.