Selenium TypeError: __init__() got an unexpected keyword argument 'service'

Selenium TypeError: __init__() got an unexpected keyword argument 'service'

我正在将我的应用程序从过程代码重构为 OOP。我正在尝试做这个 Driver class.

更新:这适用于 Windows 但不适用于 Mac。

# IMPORTS
from sys import platform
import os
from os import system

from selenium import webdriver
from selenium.webdriver import Firefox, FirefoxOptions
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# import Action chains 
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import Select
from selenium.webdriver.firefox.service import Service

class Driver():
    def __init__(self):
        #set executable path to driver
        self.dirname = os.path.dirname(__file__)
        if platform == "win32":
            self.executable_path = os.path.join(self.dirname, 'geckodriver.exe') #must save the gecko file to same directory where python is. path to geckodriver (firefox drive/motor) on your machine
            print("Gecko (Firefox) filepath is: ", self.executable_path)
        if platform == "darwin":
            self.executable_path = os.path.join(self.dirname, 'geckodriver') #must save the gecko file to same directory where python is. path to geckodriver (firefox drive/motor) on your machine
            print("Gecko (Firefox) filepath is: ", self.executable_path)
            
        self.service = Service(self.executable_path) 
            
        self.opts = FirefoxOptions()
        #self.opts.add_argument(f"--width={int(screen_width/4)}")
        #self.opts.add_argument(f"--height={int(screen_height/2)}")

        self.driver = Firefox(service=self.service, options=self.opts)
        
        self.driver.set_window_position(-10, 0)
        
        self.driver.get("https://google.com/")
    
Driver()

这会给我以下错误:

Traceback (most recent call last):
  File "/driverClass.py", line 72, in <module>
    Driver()
  File "/driverClass.py", line 66, in __init__
    self.driver = Firefox(service=self.service, options=self.opts)
TypeError: __init__() got an unexpected keyword argument 'service'

这是为什么?我正在将我的代码重构为 OOP。该代码在使用程序代码之前有效。

这是来自工作代码:

# driver configs
service = Service(executable_path) #pass in path to geckodriver
opts = FirefoxOptions()
#opts.add_argument(f"--width={int(screen_width/4)}")
#opts.add_argument(f"--height={int(screen_height/2)}")
driver = Firefox(service=service, options=opts)

driver.set_window_position(-10, 0)
#driver.set_window_size(int(screen_width/4), int(screen_height))

driver.get("https://google.com/")
self.driver = Firefox(service=self.service, options=self.opts)

Firefox 网络驱动程序不接受服务关键字参数: https://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.firefox.webdriver

查看旧的工作版本会很有帮助。

调用时可以看到

Firefox(service=self.service, options=self.opts)

它引发是因为 Firefox class 不接受服务 kwarg

如果您正在尝试设置 Firefox 网络驱动程序,您可以查看

这个错误信息...

TypeError: __init__() got an unexpected keyword argument 'service'

...暗示 service 是一个意外的关键字参数。

可能的原因,你还在使用v3.x关键字参数service 不支持。


解决方案

因为 Selenium 4.0 Beta 1:

Deprecate all but Options and Service arguments in driver instantiation. (#9125,#9128)

所以你需要升级到Selenium 4.x


参考资料

您可以在以下位置找到一些相关的详细讨论:

我遇到了同样的错误并通过升级到 Selenium 4.0 解决了这个问题

我正在使用 Anaconda python。

要在 Anaconda 上升级到 Selenium 4.0,运行 以下命令;

$ conda install https://conda.anaconda.org/conda-forge/noarch::selenium

以下命令也可以正常工作。

$ conda install selenium --channel conda-forge/noarch

在撰写本文时,您无法使用普通的 conda 命令升级 Selenium conda update selenium。 运行 此命令将安装 selenium v​​3

安装时必须指定支持selenium v​​4.1的noarch版本

下面的 link 教你怎么做。