python - 重定向未知属性

标签 python selenium oop attributes

我正在构建一个自定义类,以向 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)

因为我不想浪费时间重写像 getfind_element_by_xpath 等方法......这些方法对我来说已经很好用了,我尝试了以下方法,按照建议herehere

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/

相关文章:

c++ - 如何在基类中声明类似工厂的方法?

javascript - python (bottle) - 异步响应 - 处理客户端 (javascript)

python - 如何制作对角矩阵的掩码,但从第二列开始?

selenium - 如何使用 C# 设置 Selenium 以与 Visual Studio .NET 一起使用?

java - 无法将 key 发送到页面

javascript - fn.call 后如何获取原始上下文?

javascript - 使用 JSON 表示法,如何在 javascript 中创建公共(public)方法?

python - 如何使用 enumerate 向后计数?

python - 如何不在子流程中引用参数?

python - 如何使用 pyautogui 和 selenium 自动查找元素的位置