#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
конструктор без какого-либо параметра, чтобы упростить вещи и не перепутать имена параметров.