【问题标题】:Read straight web content with Excel VBA使用 Excel VBA 直接读取 Web 内容
【发布时间】:2018-05-24 12:12:55
【问题描述】:

这个网站上有很多关于如何使用 Excel VBA 读取网站中的标签和表格的文章,但我被困在这里。

输入邮政编码后,此网站会为我提供营业地点。 (“相对于我的邮政编码,最近的位置在哪里”)

我设法导航到该站点,输入邮政编码并点击提交:

Dim Browser As SHDocVw.InternetExplorer
Dim HTMLDoc As MSHTML.HTMLDocument


Set Browser = New SHDocVw.InternetExplorer                     ' create a browser
Browser.Visible = True                                   ' make it visible
Application.StatusBar = ".... opening page"
Browser.navigate "https://www.thewebsite.com"            ' navigate to page
WaitForBrowser Browser, 1                                ' wait for completion or timeout

Application.StatusBar = "gaining control over DOM object"
Set HTMLDoc = Browser.document                         ' load the DOM object
WaitForBrowser Browser, 1

HTMLDoc.getElementById("ZipCode").Value = "28278"
HTMLDoc.getElementById("localTeamZipSubmit").Click

网站打开,相关内容如下所示:

 <div>
        <div class="columns">
            <div class="column boldText paddingFive" style="padding-left: 20px; width: 70px;">
                Location:
            </div>
            <div class="column paddingTopFive">CHARLOTTE</div>
        </div>
        <div class="columns">
            <div class="column boldText paddingFive" style="padding-left: 20px; width: 120px;">
                Location Number:
            </div>
            <div class="column paddingTopFive">102340</div>
        </div>
        <div class="columns">
            <div class="column boldText paddingTopFive paddingLeftTwenty" style="vertical-align: top;">
                Address:
            </div>
            <div class="column paddingTopFive paddingLeftTwenty">
                <div>8848 Main St.</div>
                <div>Suite F</div>
                <div></div>
                <div>Charlotte, NC 27218</div>
            </div>
        </div>
            <div class="columns">
                <div class="column boldText paddingFive" style="padding-left: 20px; width: 70px;">
                    Phone:
                </div>
                <div class="column paddingTopFive">(704) 911-4440</div>
            </div>
                        <div class="columns">
                <div class="column boldText paddingFive" style="padding-left: 20px; width: 70px;">
                    Fax:
                </div>
                <div class="column paddingTopFive">(704) 911-4441</div>
            </div>
    </div>

如您所见,此部分没有表,没有反复使用的命名标签和类。 我还无法阅读此信息。我很乐意将整个 blob 变成一个字符串并解析它”

"文本 = HTMLDoc.getEverything()"

非常感谢您的帮助!!!


与此同时,我发现了另一个我修改过的代码 sn-p,但我在同一点上卡住了:

发布和提交作品,但如何获得答案....

 {   Private Sub PostalCodes()
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
On Error GoTo errHandler
ie.Visible = 1

With ie
    .navigate "https://www.pattersondental.com/ContactUs/MyLocalTeam"
    Do While .busy: DoEvents: Loop
    Do While .ReadyState <> 4: DoEvents: Loop
    With .document.Forms("GetBranchFromZipForm")
        .ZipCode.Value = "28273"
        .submit
    End With
'    Do While Not CBool(InStrB(1, .document.URL, _
 '       "cp_search_response-e.asp"))
 '       DoEvents
  '  Loop
    Do While .busy: DoEvents: Loop
    Do While .ReadyState <> 4: DoEvents: Loop
'    MsgBox .document.all.tags("Colums").Item(1).Rows(1).Cells(1).innerText
     MsgBox .document.all.tags("Colums").innerText
  '  MsgBox .document}

我想我必须搜索“如何剖析 HTML 文档”...

添加:

似乎 ie 是一个有效项目(在监视窗口中) IE.Document 是空的...为什么会这样,该网站仍然存在新数据。 我什至尝试了另一个在 IE 中查找打开网站的代码 sn-p,它找到了该站点(具有正确的数据)但文档仍然是空的,并且 getelementBY... 当然没有找到任何东西。 我要开始喝酒了……

【问题讨论】:

  • 考虑使用http请求而不是浏览器自动化
  • 你想从这段HTML代码中检索到的数据到底是什么,请举例说明。
  • 位置:夏洛特位置编号:102340 地址:....
  • 嗨 Banana,我看过了,但我不知道如何填写字段并单击带有 http 请求的按钮 (Get.....)
  • 这可能会有所帮助:stackoverflow.com/q/1367587/4996248 这个问题是关于 JavaScript 的,但 DOM 问题至少部分与语言无关。

标签: excel parsing webcontent vba


【解决方案1】:

我不敢相信。

戳了 3 天后,我发现了这个:

  With ActiveSheet.QueryTables.Add(Connection:="URL;     
  https://www.pattersondental.com/ContactUs/MyLocalTeam",   
  Destination:=Range("A1"))
 .PostText = "ZipCode=70032"
 .RefreshStyle = xlOverwriteCells
 .SaveData = True
 .Refresh

我不会假装理解它为什么起作用,但确实如此。

约翰,我还是会看看你的建议。谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 2010-12-18
    • 2017-04-18
    • 2021-03-02
    相关资源
    最近更新 更多