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

Selenium ChromeDriver获取下拉框对应表格数据并导出CSV求助

解决Selenium切换下拉框获取表格数据并导出CSV的方案

核心问题分析

  • 切换下拉框后未等待表格DOM更新,导致获取旧数据
  • 下拉框元素定位不准确,未触发正确的选项切换事件
  • FileStream导出CSV时未正确处理换行、分隔符或数据格式

代码实现步骤

1. 配置Selenium ChromeDriver

确保驱动版本与Chrome版本匹配,初始化浏览器时添加必要配置。

2. 定位下拉框并切换选项

使用SelectElement类处理标准下拉框,切换每个选项后通过显式等待确保表格加载完成(比Thread.Sleep更可靠);如果是自定义下拉菜单,改用点击触发展开+点击选项的方式。

3. 提取表格tbody数据

定位到tbody元素后,遍历所有行和单元格,将数据存入二维列表。

4. 导出数据到CSV

使用CsvHelper(NuGet安装)简化CSV格式处理,或用StreamWriter直接写入,避免手动处理分隔符和引号问题。

完整代码示例(C#)

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using System;
using System.Collections.Generic;
using System.IO;
using CsvHelper;

class OptionTableScraper
{
    static void Main(string[] args)
    {
        // 初始化ChromeDriver
        var chromeOptions = new ChromeOptions();
        chromeOptions.AddArgument("--start-maximized");
        using (var driver = new ChromeDriver(chromeOptions))
        {
            driver.Navigate().GoToUrl("你的目标网页URL");
            
            // 显式等待,超时时间10秒
            var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
            // 替换为实际下拉框的定位器(如ID、CSS选择器)
            var dropdown = wait.Until(d => d.FindElement(By.Id("dropdown-id")));
            
            // 初始化下拉框选择器
            var select = new SelectElement(dropdown);
            var targetOptions = new List<string> { 
                "Total Options", 
                "Equity Options", 
                "Index/Other Options" 
            };
            
            foreach (var optionText in targetOptions)
            {
                // 切换到目标选项
                select.SelectByText(optionText);
                
                // 等待表格tbody刷新(等待第一行数据加载)
                wait.Until(d => d.FindElement(By.CssSelector("table#target-table tbody tr")));
                
                // 提取表格数据
                var tbody = driver.FindElement(By.CssSelector("table#target-table tbody"));
                var rows = tbody.FindElements(By.TagName("tr"));
                var tableData = new List<List<string>>();
                
                // 先提取表头(按需选择)
                var headerRow = driver.FindElement(By.CssSelector("table#target-table thead tr"));
                var headers = headerRow.FindElements(By.TagName("th"));
                var headerList = new List<string>();
                foreach (var header in headers)
                {
                    headerList.Add(header.Text.Trim());
                }
                tableData.Add(headerList);
                
                // 遍历行提取单元格数据
                foreach (var row in rows)
                {
                    var cells = row.FindElements(By.TagName("td"));
                    var rowData = new List<string>();
                    foreach (var cell in cells)
                    {
                        rowData.Add(cell.Text.Trim());
                    }
                    tableData.Add(rowData);
                }
                
                // 导出CSV文件
                var fileName = $"{optionText.Replace("/", "-")}_数据.csv";
                using (var writer = new StreamWriter(fileName))
                using (var csvWriter = new CsvWriter(writer, System.Globalization.CultureInfo.InvariantCulture))
                {
                    foreach (var dataRow in tableData)
                    {
                        csvWriter.WriteRecord(dataRow);
                        csvWriter.NextRecord();
                    }
                }
                
                Console.WriteLine($"已导出 {optionText} 数据到 {fileName}");
            }
        }
    }
}

关键注意事项

  • 替换代码中的下拉框定位器、目标表格ID和网页URL为实际值
  • 若为自定义下拉菜单(非<select>标签),替换下拉框切换逻辑:
    // 点击下拉框触发展开
    driver.FindElement(By.CssSelector(".custom-dropdown-trigger")).Click();
    // 点击目标选项
    driver.FindElement(By.XPath($"//div[text()='{optionText}']")).Click();
    
  • 显式等待的条件可根据页面调整,比如等待特定文本出现或元素状态变化
  • 若数据包含逗号、引号等特殊字符,CsvHelper会自动处理格式,避免CSV错乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:15:57