在VBA中使用getElementByClassName

在VBA中使用getElementByClassName,vba,excel,Vba,Excel,我使用此代码从页面获取产品名称 第页的代码是 <div class="product-shop col-sm-7"> <div class="product-name"> <h1 >Claro Glass 1.5 L Rectangular Air Tight Food Container with Lid- Clear GMA0215A</h1> </div> Claro Glass 1.5

我使用此代码从页面获取产品名称 第页的代码是

<div class="product-shop col-sm-7">
<div class="product-name">
<h1 >Claro Glass 1.5 L Rectangular Air Tight Food Container with Lid- Clear GMA0215A</h1>
</div>

Claro Glass 1.5升带盖矩形密封食品容器-透明GMA025A
我的vba代码是

Public Sub GetValueFromBrowser()
Dim ie As Object
Dim name As String
Do Until IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Value = "RUNNING"
URL = Selection.Value
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = 0
.navigate URL
While .Busy Or .readyState <> 4
DoEvents
Wend
End With
Dim Doc As HTMLDocument
Set Doc = ie.document
ActiveCell.Offset(0, 1).Value = "ERROR"
name = Trim(Doc.getElementByClassName("product-name").innerText)
ActiveCell.Offset(0, 1).Value = name
ie.Quit
Loop
End Sub
Public子GetValueFromBrowser()
模糊的物体
将名称设置为字符串
直到IsEmpty(ActiveCell)为止
ActiveCell.Offset(0,1).Value=“正在运行”
URL=Selection.Value
设置ie=CreateObject(“InternetExplorer.Application”)
与ie
.Visible=0
.浏览网址
忙时或重新启动状态4
多芬特
温德
以
作为HTMLDocument的Dim Doc
Set Doc=ie.document
ActiveCell.Offset(0,1).Value=“错误”
name=Trim(Doc.getElementByClassName(“产品名称”).innerText)
ActiveCell.Offset(0,1).Value=name
即退出
环
端接头
我得到的错误是

运行时错误“438”:

对象不支持此属性或方法

GetElementsByClassName方法 方法getElementsByClassName的名称中缺少一个
s

  • 更改此
    name=Trim(Doc.getElementByClassName(“product name”).innerText)
  • 为此
    name=Trim(Doc.getElementsByClassName(“产品名称”)(0.innerText)
    。为目标项目替换
    (0)

仍然可以定义自己的函数
getElementByClassName

此函数返回DOM文档中具有给定类名的第一个元素,如果DOM文档中不存在具有此类名的元素,则不返回任何内容

Public Function getElementByClassName(doc As MSHTML.HTMLDocument, className As String) As IHTMLElement
    Set getElementByClassName = doc.querySelector("[class='" & className & "']")
End Function
用法:


请在发生错误的代码中添加注释。如果它位于
name=Trim(Doc.getElementByClassName(“product name”).innerText)
,则
getElementsByClassName
中缺少
s
。由于这将返回一个集合,因此必须指定一个项。
Dim elm As IHTMLElement
Set elm = getElementByClassName(doc, "product-name")

If Not elm Is Nothing Then
    Debug.Print elm.innerText
End If