【问题标题】:Excel VBA Scrape HTML table for textExcel VBA 为文本抓取 HTML 表格
【发布时间】:2018-03-07 01:46:57
【问题描述】:

好的,

我花了几个小时寻找如何从表格中获取文本,但在我的一生中,我还没有遇到过适合我的方法。

这是我试图从中获取信息的 HTML 示例

<table class="empDetailCard foldable unfolded">
    <tr>
        <td colspan="4" class="title">
            <span class="fold-control">full name</span>
        </td>
    </tr>
    <tr class="fold-row">
        <td>
            <div class="badgePhoto reg">
    <img class="photo " src="removed" />
</div>
</td>
        <td>
           <span class="line">
               <span class="section-title">Employee Info</span>
           </span>
           <div class="employeeInfo">
               <div>
                   <span class="line">
                       <span class="row-label">Login</span>
                       mylogin</span>
                   <span class="line">
                       <span class="row-label">Empl ID</span>
                       1234567</span>
                   <span class="line">
                       <span class="row-label">Badge</span>
                       1234567</span>
                   <span class="line">
                       <span class="row-label">Dept ID</span>
                       1234567</span>
                   <span class="line">
                       <span class="row-label">Location</span>
                       1234567
                       </span>
                   <span class="line">
                       <span class="row-label">Manager</span>
                       <a href="removed" 
                    title="">John, Smith</a>
                    </span>
        </td>
    </tr>
</table>

我尝试使用 GetElementByID、GetElementByName 甚至正则表达式从登录表中获取“mylogin”,但我没有运气。

Function IdtoLogin(empID As String)
     Dim H As Object, html As Object, objResult As Object
     Set H = CreateObject("WinHttp.WinHttpRequest.5.1")
     H.Open "GET", "myurl" & empID
     H.setRequestHeader "Content-Type", "text/xml"
     H.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0"
     H.SetAutoLogonPolicy 0
     H.send

     Set html = New HTMLDocument
     html.Body.innerHTML = H.ResponseText
     Set objResult = html.GetElementById("Login")
     IdtoLogin = objResult.innerHTML

End Function

响应返回带有登录信息的正确 HTML,但无法获取元素 ID 并引发“运行时错误 91”。如果有人能指出对我来说显而易见的事情,那就太好了,因为我快疯了。

【问题讨论】:

  • 您发布的html中没有id。
  • 这有一个 ID ...&lt;div id="mainbar"&gt;
  • 你必须做getelementsbyClassName 然后将innertext 与“登录”进行比较
  • 我试过 getelementsbyclassname 但它会抛出运行时错误 438
  • 我已经更新了主帖以显示更多来自我试图从中获取信息的页面的 HTML。

标签: html vba excel getelementbyid


【解决方案1】:

试试 CSS 选择器

html.querySelector("div.employeeInfo span")

例如,您想要的信息可能是 outerHTML 的一部分。通过使用单数 querySelector,您将获得第一个节点匹配,在显示的 HTML 中是 mylogin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    相关资源
    最近更新 更多