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

如何解决Scrapy-Selenium无法生成输出的问题?

问题排查与解决

1. 选择器语法错误

你的CSS选择器tr[class= \"app\"]里多了无效空格,正确写法应为tr[class="app"]或更简洁的tr.app。浏览器渲染后的元素class属性值是app,带空格的选择器会完全匹配不到目标行,这是无输出的核心原因。

2. 等待逻辑优化

固定wait_time=10的可靠性不足,建议用显式等待指定等待目标元素加载完成,避免页面框架加载完毕但动态内容未渲染的情况。

3. 简化解析流程

Scrapy-Selenium返回的response已经是渲染后的完整页面内容,无需重新通过driver.page_source生成Selector,直接用response.xpath/response.css即可完成解析。


修改后的代码

from scrapy import Selector
from scrapy_selenium import SeleniumRequest
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class SeamdbTestSpider(scrapy.Spider):
    name = 'steam_db_test'
    start_urls = ['https://steamdb.info/graph/']

    def start_requests(self):
        for link in self.start_urls:
            yield SeleniumRequest(
                url=link, 
                # 显式等待目标表格加载完成,超时15秒
                wait_until=EC.presence_of_element_located((By.ID, "table-apps")),
                callback=self.parse)
        
    def parse(self, response):
        # 直接用response解析目标行
        rows = response.css('tr.app')[0:2]

        for element in rows:
            info_link = "https://steamdb.info" + element.css('a::attr(href)').get()
            name = element.css('a::text').get()
            # 增加判空处理,避免无效数据
            if name and info_link:
                yield {"Name": name.strip(), "Link": info_link}

额外检查点

  • 确认Scrapy-Selenium中间件已在settings.py中正确配置:
    DOWNLOADER_MIDDLEWARES = {
        'scrapy_selenium.SeleniumMiddleware': 800
    }
    SELENIUM_DRIVER_NAME = 'chrome'  # 替换为你使用的浏览器
    SELENIUM_DRIVER_EXECUTABLE_PATH = '/path/to/your/driver'  # 驱动文件路径
    SELENIUM_DRIVER_ARGUMENTS = ['--headless=new']  # 可选无头模式配置
    
  • 检查浏览器版本与驱动版本是否匹配,版本不兼容可能导致隐性渲染失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:15:47