我正在构建一个自定义类,以向 Python 3.6.2 上的 selenium.webdriver.Chrome 添加功能。
from selenium import webdriver
class MyChrome:
def __init__(self):
self.mydriver = webdriver.Chrome()
到目前为止,除了我自己创建的一些自定义方法之外,我还重写了一些 selenium.webdriver.Chrome
非常标准的方法,如下所示:
def get(self, url):
self.mydriver.get(url)
因为我不想浪费时间重写像 get
、find_element_by_xpath
等方法......这些方法对我来说已经很好用了,我尝试了以下方法,按照建议here和 here
def __getattr__(self, name, *args, **kwargs):
return getattr(self.mydriver, name)(*args, **kwargs)
但是当我运行以下代码时
from selenium import webdriver
class MyChrome:
def __init__(self):
self.mydriver = webdriver.Chrome()
def __getattr__(self, name, *args, **kwargs):
return getattr(self.mydriver, name)(*args, **kwargs)
chrome = MyChrome()
chrome.get('https://stackoverflow.com/')
我遇到错误
Traceback (most recent call last):
File "MyChrome.py", line 11, in <module>
chrome.get('https://stackoverflow.com/')
File "MyChrome.py", line 8, in __getattr__
return getattr(self.mydriver, name)(*args, **kwargs)
TypeError: get() missing 1 required positional argument: 'url'
如何将对象 chrome
上调用的未知方法的调用重定向到其实例变量 self.driver
?
最佳答案
我创建了一个自定义 Webdriver 来向 selenium Chrome Webdriver 添加功能,并且通过子类化 selenium Chrome Webdriver 来实现这一点。这样你就可以继承所有的 webdriver 方法而无需 getattr
from selenium.webdriver import Chrome
class MyChrome(Chrome):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# add all your custom features
它并没有提供您问题的答案,而是您可以利用的东西
关于python - 重定向未知属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48807942/