如何用iMacros提取DIV下tr(odd/even类)数据到Excel?
问题:iMacros提取表格数据至Excel失败
需求:从包含多个子元素的DIV中,提取class为odd或even的<tr>标签内的数据到Excel,每个<tr>对应一行数据,其中<td>的class如rightcelltd 1cell对应独立列。
对应的HTML代码片段:
<div class="dataTables_scrollBody" style="position: relative; overflow: auto; max-height: 310px; height: 310px; width: 100%;"> <table id="opt_montage_table" class="montage_table dataTable" style="width: 100%;"> <tbody> <tr class="odd"> <td class="rightcelltd 1cell"></td> <td class="rightcelltd 2cell"></td> <td class="rightcelltd 3cell"></td> </tr> <tr class="even"> <td class="rightcelltd 1cell"></td> <td class="rightcelltd 2cell"></td> <td class="rightcelltd 3cell"></td> </tr> <tr class="odd"> <td class="rightcelltd 1cell"></td> <td class="rightcelltd 2cell"></td> <td class="rightcelltd 3cell"></td> </tr> <tr class="even"></tr> <tr class="odd"></tr> <tr class="even"></tr> <tr class="odd"></tr> <tr class="even"></tr> </tbody> </table> </div>
尝试过以下无效命令(均返回#enaf#错误):
TAG POS=5 TYPE=DIV ATTR=CLASS:"dataTables_scrollBody" EXTRACT=TXTTAG POS=5 TYPE=TABLE ATTR=CLASS:"montage_table dataTable" EXTRACT=TXTTAG POS=5 TYPE=TABLE ATTR=CLASS:"opt_montage_table" EXTRACT=TXTTAG POS=5 TYPE=TABLE ATTR=CLASS:"montage_table dataTable" EXTRACT=TXTTAG POS=5 TYPE=DIV ATTR=CLASS:"montage_table dataTable" EXTRACT=TXT
解决方案
核心思路
放弃直接提取整个容器文本的方式,改为循环遍历所有目标<tr>,逐行提取每个<td>的独立数据,再将整理后的数据输出为Excel兼容格式。
具体iMacros脚本实现
SET !EXTRACT_TEST_POPUP NO ' 获取所有符合条件的<tr>总数 TAG POS=1 TYPE=TR ATTR=CLASS:odd||even EXTRACT=TXT SET !VAR1 {{!EXTRACT}} SET !EXTRACT NULL TAG POS=R-1 TYPE=TR ATTR=CLASS:odd||even EXTRACT=TXT SET !TOTAL_LOOPS {{!EXTRACT}} SET !EXTRACT NULL ' 循环遍历每一行数据 SET !LOOP 1 TAG POS={{!LOOP}} TYPE=TR ATTR=CLASS:odd||even ' 提取当前行的3列数据(注意用<SP>代替空格) TAG POS=R-1 TYPE=TD ATTR=CLASS:rightcelltd<SP>1cell EXTRACT=TXT SET !COL1 {{!EXTRACT}} SET !EXTRACT NULL TAG POS=R-1 TYPE=TD ATTR=CLASS:rightcelltd<SP>2cell EXTRACT=TXT SET !COL2 {{!EXTRACT}} SET !EXTRACT NULL TAG POS=R-1 TYPE=TD ATTR=CLASS:rightcelltd<SP>3cell EXTRACT=TXT SET !COL3 {{!EXTRACT}} SET !EXTRACT NULL ' 合并为制表符分隔格式,适配Excel列识别 SET !EXTRACT {{!COL1}}<TAB>{{!COL2}}<TAB>{{!COL3}} ' 保存为CSV文件,可直接用Excel打开 SAVEAS TYPE=EXTRACT FOLDER=* FILE=table_data.csv
关键说明
- 定位逻辑修复:之前用
POS=5硬编码位置容易出错,改用POS={{!LOOP}}配合循环遍历所有符合条件的<tr>。 - 精确列提取:针对每个
<td>的class单独提取,用<SP>代替空格匹配class属性中的空格,避免提取混乱。 - Excel兼容格式:用
<TAB>分隔列数据,保存为CSV后可直接导入Excel,自动识别列结构。 - 空行处理:如果存在空
<tr>,脚本会提取空值,可按需添加判断跳过空行:
IF {{!COL1}} == "" AND {{!COL2}} == "" AND {{!COL3}} == "" THEN GOTO SKIP_ROW ENDIF ' 保存数据的代码 LABEL SKIP_ROW
内容的提问来源于stack exchange,提问作者Parkson
相关产品推荐
相关产品推荐

