Python Selenium独立浏览器驱动复用报错:MyDriver无get属性
解决Selenium自定义Driver类的AttributeError问题
嘿,这个问题我之前帮朋友排查过,其实根源很好找——你写的MyDriver类本身并没有get方法,get是属于类内部那个self.driver(也就是Firefox驱动实例)的方法。当你在另一个文件里调用driver.get()时,Python会在MyDriver对象上找这个方法,自然就报AttributeError了。
下面给你几个可行的解决方案,按需选择:
方案1:手动封装需要的方法(推荐,灵活可控)
在MyDriver类里添加get方法,把调用转发给内部的self.driver,还可以顺便封装其他常用方法(比如quit、find_element),方便后续扩展:
from selenium import webdriver class MyDriver(): def __init__(self): self.driver = webdriver.Firefox() # 这里还可以加自定义初始化逻辑,比如设置窗口大小 self.driver.set_window_size(1920, 1080) # 封装get方法 def get(self, url): self.driver.get(url) # 封装quit方法 def quit(self): self.driver.quit() # 按需封装其他方法,比如查找元素 def find_element(self, by, value): return self.driver.find_element(by, value)
这样修改后,你原来的调用代码完全不用改,直接运行就能正常打开谷歌页面了。
方案2:继承Selenium驱动类(简洁高效)
如果你的MyDriver不需要太多自定义逻辑,只是想统一管理驱动实例,直接让它继承webdriver.Firefox就行,这样会自动继承所有驱动的方法:
from selenium import webdriver class MyDriver(webdriver.Firefox): def __init__(self): super().__init__() # 同样可以加自定义初始化逻辑 self.set_window_size(1920, 1080)
调用代码依然保持不变:
from driver import MyDriver driver = MyDriver() driver.get('http://google.com')
这种方式代码量最少,适合简单封装场景。
方案3:直接访问内部驱动实例(不推荐)
虽然可以直接通过driver.driver.get()来调用,但这种方式破坏了类的封装性——如果以后你修改了MyDriver内部驱动的变量名(比如把self.driver改成self.browser),所有调用的地方都要跟着改,维护成本很高,所以不建议这么做:
from driver import MyDriver driver = MyDriver() driver.driver.get('http://google.com')
总的来说,方案1和方案2都是比较规范的做法,根据你的实际需求选就行啦!
内容的提问来源于stack exchange,提问作者Quentin Richarson
相关产品推荐
相关产品推荐

