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

Scrapy与Selenium结合运行爬虫时出现KeyError: 'driver'问题求助

解决Scrapy用CrawlerProcess运行时出现KeyError: 'driver'的问题

问题原因

直接执行scrapy runspider Myspider时,Scrapy会自动加载项目根目录下的settings.py配置文件,其中的Selenium相关配置和下载中间件设置会被正常读取,SeleniumMiddleware能完成driver的初始化。但通过CrawlerProcess启动爬虫时,默认不会自动加载项目的settings,导致Selenium的配置未生效,中间件无法创建driver实例,最终触发KeyError: 'driver'。

另外你的爬虫类代码里存在一个小问题:__init__方法中调用super时用了字符串my_spider,而不是当前类名MySpider,这会导致父类初始化异常,虽不是直接触发该错误的原因,但也是潜在问题。

解决方案

1. 让CrawlerProcess加载项目settings

修改主文件,导入并传入项目的settings配置:

import scrapy
import classListUrls
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings  # 新增导入
from dir.spiders import Spider


URL = "example.com"
urls = classListUrls.GenListUrls(URL)

# 传入项目settings创建CrawlerProcess
process = CrawlerProcess(get_project_settings())
process.crawl(Spider.my_spider, list_urls = urls.list_urls())
process.start()

2. 修正爬虫类的super调用

修改爬虫文件中的__init__方法:

class MySpider(scrapy.Spider):
    name = 'my_spider'
    
    def __init__(self, list_urls, *args, **kwargs):
        # 将super的第一个参数改为当前类名MySpider
        super(MySpider, self).__init__(*args, **kwargs)
        self.urls = list_urls

    def start_requests(self):
        for url in self.urls:
            yield SeleniumRequest(
                url = url['link'],
                callback = self.parse,
                wait_time = 15,
            )

3. 确保Selenium驱动配置正确

检查settings.py中的SELENIUM_DRIVER_EXECUTABLE_PATH:

  • 如果你的系统环境变量PATH中已经包含chromedriver的路径,保持注释没问题;
  • 如果没有,取消注释并填写正确的chromedriver绝对路径,避免驱动找不到的问题:
SELENIUM_DRIVER_EXECUTABLE_PATH = '/home/PATH/OF/FILE/chromedriver'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:15:30