首页 > 解决方案 > HTML 表格抓取 - 表格对象返回为 1 个大单元格而不是单独的元素

问题描述

我一直在 excel VBA 中开发一个网页抓取程序(在这个论坛有很多帮助)。

我被困在一张显示单行的表格上,我需要自动点击。我在该过程的早期对类似的表使用了相同的方法,并且效果很好:

   setting the HTML table to IEtable object

   using ietable.rows(1).click

但是,此表返回 1 个单元格,其中包含我在网页上看到的所有单独元素的值,并且 .click 函数不起作用。

这是我试图访问的表的 HTML 代码:

<table id="tblPatientList" class="tblTabBody" style="height: 143px; width: 653px;" cellspacing="2" cellpadding="0">
    <tbody>
        <tr style="height: 100%; width: 100%;">
            <td style="width: 649px; height: 100%;">
                <div id="divPatientList" style="overflow: auto; width: 100%; height: 100%; background-color: white;">
                    <table id="dgrPatients" class="tblpat" style="border-width: 0px; width: 100%; border-collapse: collapse;" border="0" rules="all" cellspacing="0" cellpadding="1">
                        <tbody>
                            <tr class="headerBlue">
                                <td style="width: 5%;">&nbsp;</td>
                                <td style="width: 15%;">Hosp No.</td>
                                <td style="width: 15%;">Surname</td>
                                <td style="width: 15%;">Forename</td>
                                <td style="width: 10%;">DOB</td>
                                <td style="width: 2%;">Sex</td>
                                <td style="width: 10%;">NHS Number</td>
                                <td style="width: 25%;">Address</td>
                                <td class="screenOnlyOutput" style="width: 5%;" align="center">List</td>
                            </tr>
                            <tr class="even" style="color: red;">
                                <td align="center">&nbsp;</td>
                                <td><strong>12345678</strong></td>
                                <td>ANONYMOUS FIRST NAME</td>
                                <td>ANONYMOUS LAST NAME</td>
                                <td>dd/mm/yyyy</td>
                                <td align="center">M</td>
                                <td>123&nbsp;456&nbsp;7890&nbsp;<img style="cursor: hand; vertical-align: middle; border: 0px;" title="Number present and verified" src="/icedesktop/dotnet/icedesktop/images/tick.gif" /></td>
                                <td>ANONYMOUS ADDRESS</td>
                                <td class="screenOnlyOutput" align="center"><input id="dgrPatients_ctl02_chkAddOrRemove" style="border: 0px; height: 12px;" name="dgrPatients$ctl02$chkAddOrRemove" type="checkbox" /></td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </td>
        </tr>
    </tbody>
</table>

此表始终只返回 2 行 - 一个标题和 1 个数据行。我尝试点击它:

Set ieTbl = ieDoc.Document.frames(0).Document.all.tblPatientList
    If Not ieTbl Is Nothing Then
    ieTbl.Rows(1).Click
    Set ieTbl = Nothing
End If

当我在即时窗口中检查 ietable 对象时,它只有 1 行和 1 列,包含 ietbl 对象中 1 个单元格中的 html 页面上的所有单独单元格。

为什么要这样做?

标签: excelvbaweb-scraping

解决方案


推荐阅读