【问题标题】:Scrape data from 'nested' iframe with vba使用 vba 从“嵌套”iframe 中抓取数据
【发布时间】:2017-11-02 03:31:42
【问题描述】:

我正在尝试从 mcmaster.com 抓取标题和价格,以自动填充内部购买记录表。 (带有项目部件号的 URL 在下面被硬编码用于测试。)标题很好,但无法获得价格。我认为我的代码没有找到正确的位置,因为找不到该元素。我从here. 建模了我的代码

Sub get_title_header()
Dim wb As Object
Dim doc As Object
Dim sURL As String

Set wb = CreateObject("internetExplorer.Application")
sURL = "https://www.mcmaster.com/#95907A480"

wb.navigate sURL
wb.Visible = True

While wb.Busy Or wb.readyState <> READYSTATE_COMPLETE
    DoEvents
Wend

'Wait a bit for everything to catchup...(network?)
Application.Wait (Now + TimeValue("0:00:02"))

'HTML document
Set doc = wb.document

Dim MyString As String
MyString = doc.Title

Sheet2.Cells(1, 2) = Trim(Replace(MyString, "McMaster-Carr -", "", , , vbTextCompare))

Dim el As Object
For Each el In doc.getElementsByName("Prce")
    Sheet2.Cells(2, 2).Value = el.innerText
Next el

wb.Quit

End Sub

这个 iframe 是嵌套的吗?谁能解释为什么我的代码看不到 iframe 数据并帮助我获取商品价格?提前致谢!

【问题讨论】:

  • 在您发送的链接中,您希望的价格是 6.42 美元吗?
  • $6.42 Each
    是价格元素的来源。
  • 正确,寻找“每个 6.42 美元”

标签: vba excel iframe


【解决方案1】:

您尝试在链接中抓取的元素嵌套如下:

你犯的第一个错误是你试图通过name而不是id获取这个对象:

doc.getElementsByName("Prce")

您的 HTML 文档中没有 name="Prce" 的对象,所以我预计 For 循环甚至不会开始。

相反,您可能想要做的是:

Sheet2.Cells(2, 2).Value = doc.getElementById("Prce").getElementsByClassName("PrceTxt")(0).innerText

在哪里:

  • doc.getElementById("Prce") 为您获取元素 &lt;div id="Prce"&gt;...&lt;/div&gt;
  • .getElementsByClassName("PrceTxt")(0) 为您提供上述 div 中的第一个(也是唯一一个)元素,即 &lt;div class="PrceTxt"&gt;...&lt;/div&gt;
  • .innerText 获取此元素的文本

【讨论】:

  • 效果很好!感谢您的解释和惊人的快速响应! StackOverflow 是迄今为止我最喜欢的代码问题。
  • @Brother.Ed 很高兴它起作用了,请接受我的回答,以便关闭线程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
相关资源
最近更新 更多