Selenium将表写入CSV文件

时间:2016-02-04 12:12:21

标签: python html csv selenium selenium-webdriver

我目前正在尝试让selenium迭代表元素中的行,最后将这些行转换为CSV。我尝试了多种方法,有些让我陷入困境,有些只是抛出错误。有没有办法在查找元素以迭代所有<tr><td>标记时嵌套某种for循环?

我正在使用的表格很多,有很多嵌套的div和spans所以我会创建一个虚拟使用

<table class="charges">
<tr>
<td>A</td>
<td>B</td>
</tr>

<tr>
<td>C</td>
<td>D</td>
</tr>

<tr>
<td>E</td>
<td>F</td>
</tr>

<tr>
</tr>
</table>

到目前为止,我已经尝试过:

chargesTableRaw = driver.find_element_by_class_name("charges")

chargesTable = chargesTableRaw.text

print(chargesTable)

但这只是给我结果

A
B
C
D
E
F

我还试图对chargeTable变量进行漂亮打印,这使得它只是将换行符显示为原始代码,而不是实际丢弃一行。有没有办法在表格中遍历行本身,因为我相信这将是允许我将数据格式化为CSV的唯一方法

1 个答案:

答案 0 :(得分:0)

按照以下步骤将表格数据导出到CSV文件

  1. 首先收集所有表值,方法是每个行的值用#分隔,每列用以下分隔:
  2. 获得表值后,可以使用以下代码
  3. 将这些值导出为CSV文件

    列值示例,test1#test2#test3#test4:2#3#4#5:6#2#8#1

    #import com.csvreader.CsvWriter;
    
        public void creatCSVfiles(String sheetData, String filePath) {
                boolean alreadyPresent = new File(filePath).exists();
                try {
                    CsvWriter csvOutputWrite = new CsvWriter(new FileWriterWithEncoding(filePath, CHARSET, true), ',');
                    if (alreadyPresent) {
                        //delete file
                    }
    
                    //split each row Data separated by : , Get the Number of Rows.
    
                    String[] colHeader = sheetData.split(":");
    
                    for (int count = 0; count < colHeader.length; count++) {
    
                   //Split each row values by # , get the number of columns.
                        String[] colHeadVal = colHeader[count].split("#");
    
                        for (int rowValue = 0; rowValue < colHeadVal.length; rowValue++) {
                            csvOutputWrite .write(colHeadVal[rowValue]);
                        }
    
                        csvOutputWrite .endRecord();
                    }
                    csvOutputWrite .close();
                } catch (IOException e) {
                    //exception message
                }
            }
    

    希望这能解决你的问题.. :)