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

使用C#将Selenium爬取的数据写入Excel失败,生成文件为空

问题分析与解决方案

核心问题总结

你的代码生成空Excel的根源是数据采集环节的逻辑错误,导致DataTable未正确填充有效数据,后续OpenXML写入自然为空。

具体问题点及修复步骤

1. 数据采集的循环与对象赋值错误

  • 问题:遍历职位元素时,内层循环中每次创建新的Item对象但未赋值Titles和JobLinks,反而丢弃了已收集数据的item实例,最终items列表中的对象缺失关键信息。
  • 修复:调整循环逻辑,确保每个职位对应一个完整的Item对象:
    foreach (var job in eachJob)
    {
        var item = new Item();
        // 提取职位标题
        var titleElements = job.FindElements(By.CssSelector("span[title]"));
        if (titleElements.Any())
        {
            item.Titles.Add(titleElements.First().GetAttribute("title"));
        }
        // 提取公司名称
        var companyNameElement = job.FindElement(By.XPath(".//span[@data-testid='company-name']"));
        item.CompanyName = companyNameElement.Text;
        // 提取发布日期
        var publishedElement = job.FindElement(By.XPath(".//span[@class='date']"));
        item.PublishDate = publishedElement.Text;
        // 提取职位链接
        var joblinkElements = job.FindElements(By.CssSelector("a.jcs-JobTitle"));
        foreach (var link in joblinkElements)
        {
            item.JobLinks.Add(link.GetAttribute("href"));
        }
        // 将完整的Item加入列表
        items.Add(item);
    }
    

2. DataTable列顺序不匹配

  • 问题:DataTable的列顺序是Nome da Empresa、Titulo、Data、Link,但添加行时参数顺序为CompanyName、PublishDate、Titles、JobLinks,不仅顺序错位,集合类型直接转字符串会显示为类型名而非实际内容。
  • 修复:调整参数顺序,并将集合转为可读字符串:
    foreach (var item in items)
    {
        string titles = string.Join(", ", item.Titles);
        string links = string.Join(", ", item.JobLinks);
        dataTable.Rows.Add(item.CompanyName, titles, item.PublishDate, links);
    }
    

3. 页面加载等待不充分

  • 问题:输入"remoto"回车后直接定位职位列表,未等待页面完全加载,可能导致eachJob为空集合。
  • 修复:添加显式等待确保列表加载完成:
    // 等待职位列表可见
    wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//*[@id=\"mosaic-provider-jobcards\"]/ul")));
    IWebElement allJobs = driver.FindElement(By.XPath("//*[@id=\"mosaic-provider-jobcards\"]/ul"));
    

4. 弹窗关闭逻辑的空引用风险

  • 问题:判断closePopup != null后同时点击两个弹窗元素,若closeGooglePopup为null会引发异常。
  • 修复:分别判断并处理:
    if (closeGooglePopup != null) closeGooglePopup.Click();
    if (closePopup != null) closePopup.Click();
    

OpenXML写入环节优化(非空文件直接原因)

  • 创建SheetData时直接关联,避免潜在的空引用:
    SheetData sheetData = new SheetData();
    worksheetPart.Worksheet = new Worksheet(sheetData);
    
  • using块会自动处理文档保存,无需单独调用workbookPart.Workbook.Save()。

验证步骤

修复后先确认控制台输出的职位数据完整,再检查DataTable的行数和内容,最终生成的Excel文件即可包含正确的职位信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:02:09