Python Selenium报错:Query对象无_Query__chrome属性求助
问题原因及修复方案
核心错误点
- 构造函数名称不符合规范:Python类的构造函数必须是
__init__(前后各两个下划线),你写的_init_少了两个下划线,导致这个方法不会被Python自动调用,实例化Query对象时根本没初始化__chrome属性,调用方法时自然找不到该属性。 - 实例化时未传入必要参数:
Query类的构造函数要求传入queryData、ncts、chrome三个参数,但你直接执行query = Query(),既没传参,也没触发正确的构造函数,双重错误导致属性缺失。
修复后的代码
from src.query.ncts_query_data import QueryData from src.login.ncts_login import Ncts from src.browser.chrome import Chrome class Query: # 修正构造函数名称为__init__ def __init__(self, queryData: QueryData, ncts: Ncts, chrome: Chrome): self.__queryData = queryData self.__ncts = ncts self.__chrome = chrome def query_press_key(self): self.__chrome.press_key("/html/body/form/div[4]/div[2]/div[1]/div/div[3]/div/div/div[2]/table[1]/tbody/tr/td/table/tbody/tr[4]/td[2]/input", "DENEME") # 先创建构造Query所需的各个实例 chrome = Chrome() ncts = Ncts(chrome) # 这里根据Ncts类的实际构造要求调整,确保它持有Chrome实例 query_data = QueryData() # 正确传入所有参数实例化Query query = Query(query_data, ncts, chrome) ncts.login() ncts.open_guarentee_query() query.query_press_key()
额外说明
- 如果
Ncts类本身已经内部创建了Chrome实例,你可以从ncts中获取该实例传入Query,比如query = Query(query_data, ncts, ncts.chrome)(具体属性名根据Ncts类的实现调整)。 - 双下划线开头的属性(如
__chrome)是Python的名称修饰机制,只能在类内部直接访问,如果你需要在外部访问这类属性,建议改用单下划线(如_chrome)或者提供getter方法。
内容的提问来源于stack exchange,提问作者Selim
相关产品推荐
相关产品推荐

