You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium报错AttributeError: 'WebDriver'对象无'driver'属性求助

问题分析与解决

错误含义

AttributeError: 'WebDriver' object has no attribute 'driver' 表示你试图访问一个WebDriver对象的driver属性,但该属性并不存在于WebDriver类中。

错误原因

你在run.py里直接通过LogIn类调用了choose_method方法,但choose_method是实例方法——这类方法必须通过类的实例来调用,第一个参数self会自动绑定到实例对象。你现在把browser(即WebDriver对象)作为第一个参数传入,导致方法里的self变成了WebDriver对象,而WebDriver并没有driver属性,因此触发报错。

解决方案

方案1:先实例化LogIn类,再调用方法(推荐)

修改run.py中的代码,先创建LogIn的实例,再通过实例调用方法:

def run():
    browser = init_driver(C.url)
    # 先创建LogIn实例,传入driver对象
    login_handler = LogIn(browser)
    # 通过实例调用choose_method方法
    login_handler.choose_method(By.CSS_SELECTOR, '#credentialSignin')

方案2:将choose_method改为类方法/静态方法

如果你的LogIn类不需要维护实例状态,可以把choose_method改成类方法,这样就能直接通过类调用:
修改helpers.py:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class LogIn:
    @classmethod
    def choose_method(cls, driver, method, locator):
        WebDriverWait(driver,10).until(EC.visibility_of_element_located((method,locator))).click()

这种情况下run.py里的调用代码不需要修改,同时可以删掉__init__方法,因为类方法不需要实例属性。

额外优化建议

你的ChromeBrowser.py里使用了全局driver变量,可能会导致潜在的资源泄漏或冲突问题,建议把driver的创建逻辑放到init_driver函数内部:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

def init_driver(url):
    options = webdriver.ChromeOptions()
    options.add_experimental_option("detach", True)
    options.add_argument("disable-infobars")
    driver = webdriver.Chrome(options=options, service=Service(ChromeDriverManager().install()))
    driver.get(url)
    return driver

内容的提问来源于stack exchange,提问作者XXX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 10:17:11