运行带UI(有头模式)的scrapy-selenium时报TypeError: NoneType不可迭代
错误原因
这个报错是因为你未在settings.py中配置SELENIUM_DRIVER_ARGUMENTS参数,scrapy-selenium中间件初始化时需要遍历该参数传入浏览器启动参数,参数不存在时就会报NoneType不可迭代的错误。
解决方案
1. 修改settings.py配置
要开启有头UI模式,不需要添加--headless参数,补充配置如下:
SELENIUM_DRIVER_NAME = 'chrome' SELENIUM_DRIVER_EXECUTABLE_PATH ='Musttrybasic/chromedriver.exe' # 新增浏览器启动参数配置,空列表默认就是有头模式 SELENIUM_DRIVER_ARGUMENTS = [] # 有需要可以加其他常用参数,比如窗口最大化、禁用沙箱等: # SELENIUM_DRIVER_ARGUMENTS = ['--start-maximized', '--no-sandbox', '--disable-dev-shm-usage']
2. 修复爬虫代码问题
你的parse方法存在缩进错误,同时如果使用Selenium4+版本,旧的元素定位方法已经弃用,建议修改为兼容写法:
def parse(self, response): # 修正缩进错误 driver = response.meta['driver'] # Selenium4+推荐用By类定位元素 search_input = driver.find_element(By.CSS_SELECTOR, 'input#location') search_input.send_keys('pune') time.sleep(5) search_input.send_keys(Keys.DOWN) search_input.send_keys(Keys.ENTER) time.sleep(10) # 后续可通过driver.page_source获取渲染后的页面源码,再用Selector解析提取数据
注意事项
确保你的chromedriver版本和本地安装的Chrome浏览器主版本完全一致,否则也可能出现浏览器启动失败的问题。
内容的提问来源于stack exchange,提问作者Iswar Chand
相关产品推荐
相关产品推荐

