首页 > 解决方案 > python selenium 继承 webdriver 方法

问题描述

我一直在寻找一种解决方案来继承 python selenium webdriver 类的方法,以便我可以扩展/修改它的行为。我还没有找到一个工作。

例如,我想继承 chrome webdriver 的所有方法,但扩展 .get() 方法(即加载 url 的方法)。这是我目前的做法:

from selenium import webdriver
from selenium.common.exception import TimeoutException

class CustomDriver:

   def __init__(self, browser):
      if browser.lower() == 'chrome'
         self.driver = webdriver.Chrome()
   
   def get_url(self, url):
      try:
         self.driver.get(url)
      
      except TimeoutException:
         self.driver.quit()

此方法有效,但它不继承一般的 webdriver 方法,如driver.quit(). 事实上,如果我执行以下操作:

mydriver = CustomDriver('Chrome')
mydriver.quit()

我得到错误:'Custom driver' object has no attribute quit。你们有什么建议吗?

ps:我是python新手。

标签: pythonseleniumselenium-webdriver

解决方案


quit() 来自 webdriver 方法,您正在从 selenium 模块导入它,并且您已经为 webdriver.Chrome() 创建了一个对象 self.driver

所以你不能在创建的类对象上使用 webdriver 方法,这就是你得到 No Attribute Error 的原因:'Custom driver' object has no attribute quit

获得继承的一种方法是在类内部声明相应的方法并在外部继承这些方法。

请参阅此文档:https ://www.geeksforgeeks.org/web-driver-methods-in-selenium-python/

下面是可以工作的代码

from selenium import webdriver
from selenium.common.exceptions import TimeoutException

class CustomDriver:
    def __init__(self, browser):
        if browser.lower() == 'chrome':
            self.driver = webdriver.Chrome()

    def exit_browser(self):
        self.driver.quit()

    def get_url(self, url):
        try:
            self.driver.get(url)
        except TimeoutException:
            self.driver.quit()


mydriver = CustomDriver('Chrome')
mydriver.get_url("https://www.google.com/")
mydriver.exit_browser()

推荐阅读