如何在继承webdriver.Firefox的类中使用Selenium Options?
如何在继承webdriver.Firefox的类中使用Options?
我已经掌握了Python Selenium中Options的基础用法:
options = webdriver.FirefoxOptions() options.headless=True driver = webdriver.Firefox(options=options) driver.get('https://lxml.de') print(driver.title)
但当类继承自webdriver.Firefox时,不知道如何在OOP模式下正确使用Options,现有代码结构如下:
class Get_selenium_dynamic_data(webdriver.Firefox): def __init__(self, teardown=True): self.teardown = teardown super(Get_selenium_dynamic_data, self).__init__() self.implicitly_wait(10) self.maximize_window()
尝试了两种方式都无效:
方式一:
options = webdriver.FirefoxOptions() options.headless=True class Get_selenium_dynamic_data(webdriver.Firefox(options=options)):
方式二:
class Get_selenium_dynamic_data(webdriver.Firefox): def __init__(self, teardown=True): options = webdriver.FirefoxOptions() options.headless=True self(option=options) #self = self(option=options)
正确实现方法
核心是在子类的__init__方法中创建Options实例,然后通过super()调用父类构造函数时传入该参数,代码如下:
from selenium import webdriver class Get_selenium_dynamic_data(webdriver.Firefox): def __init__(self, teardown=True, headless=False): # 初始化配置项 options = webdriver.FirefoxOptions() options.headless = headless # 调用父类构造方法并传入options super().__init__(options=options) self.teardown = teardown self.implicitly_wait(10) # 无头模式下最大化窗口不生效,按需调整 if not headless: self.maximize_window() # 使用示例 if __name__ == "__main__": driver = Get_selenium_dynamic_data(headless=True) driver.get('https://lxml.de') print(driver.title) driver.quit()
错误方式分析
- 方式一:试图继承
webdriver.Firefox的实例,这是语法错误——Python类只能继承类本身,不能继承类的实例对象。 - 方式二:
self(option=options)是错误的调用方式,self是当前类的实例,不能像函数一样调用;self = self(option=options)也只是重新赋值局部变量,不会改变实例的初始化逻辑。
额外优化
把headless作为参数传入__init__,可以灵活控制是否启用无头模式;同时注意无头模式下maximize_window()通常无效,可根据需求调整该逻辑。
内容的提问来源于stack exchange,提问作者Dmitriy Neledva
相关产品推荐
相关产品推荐

