如何基于Selenium ChromeDriver创建自定义类并解决多文件报错
问题解决:Selenium多文件类结构封装错误排查
错误原因
你错误地将webdriver.Chrome的实例作为父类继承,而非继承webdriver.Chrome类本身。Selenium的浏览器驱动类是用于实例化的,继承实例会导致内部参数解析混乱,触发AttributeError。
修正后的多文件结构
1. 封装类文件(folder/scrape.py)
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By class Scrape(webdriver.Chrome): def __init__(self): # 初始化ChromeDriver服务 chrome_service = Service("C:\\SeleniumDrivers\\chromedriver.exe") # 调用父类构造方法传入服务参数 super().__init__(service=chrome_service) # 可添加自定义方法,比如封装元素查找逻辑 def find_by_name(self, name): return self.find_element(By.NAME, name)
2. 运行文件(run.py)
from folder.scrape import Scrape # 实例化自定义爬虫类 scraper = Scrape() # 打开目标网页 scraper.get("http://www.google.co.uk") # 最大化窗口(注意方法名是maximize_window,不是maximisewindow) scraper.maximize_window() # 查找搜索框并输入内容 search_box = scraper.find_by_name("q") search_box.send_keys("Selenium 4 用法" + Keys.ENTER) # 后续操作... # 操作完成后关闭浏览器 # scraper.quit()
关键注意事项
- 继承
webdriver.Chrome类而非其实例,在子类__init__中完成父类的初始化并传入必要参数(如Service)。 - 严格遵循Selenium的方法命名规范:比如
maximize_window(下划线分隔)、find_element(而非findelement),且查找元素必须配合By类指定定位策略(如By.NAME、By.ID)。 - 可在
Scrape类中扩展自定义方法,封装重复操作,提升代码复用性。
内容的提问来源于stack exchange,提问作者Gold Maxxx
相关产品推荐
相关产品推荐

