Html 如何在vba web scraping中使用span标记获取值?

Html 如何在vba web scraping中使用span标记获取值?,html,vba,web,web-scraping,screen-scraping,Html,Vba,Web,Web Scraping,Screen Scraping,我是一个网页抓取乞丐,这是我的第一个项目。我试图抓住ADVFN网站上的价值,并将其传递到我的工作表上 这是链接: 我要复制的值在3,03中 我不太清楚这为什么不起作用: Sub web_scraping_teste() Dim ieObj As InternetExplorer Dim teste As Object Set ieObj = New InternetExplorer ieObj.Visible = False ieO

我是一个网页抓取乞丐,这是我的第一个项目。我试图抓住ADVFN网站上的价值,并将其传递到我的工作表上

这是链接:

我要复制的值在3,03中

我不太清楚这为什么不起作用:

Sub web_scraping_teste()

    Dim ieObj As InternetExplorer
    Dim teste As Object

    Set ieObj = New InternetExplorer
    
    ieObj.Visible = False
    
    ieObj.navigate ("https://br.advfn.com/bolsa-de-valores/bmf/DI1F22/cotacao")
    
    Application.Wait (Now + TimeValue("00:00:02"))
    
    Set teste = ieObj.document.getElementById("quoteElementPiece1").getElementsByTagName("span")(0).innerText
    
    Range("A1").Value = teste
    
End Sub

这应该是可行的,因为您想要的值直接包含在具有提供id的元素中:

Set teste = ieObj.document.getElementById("quoteElementPiece1")

Range("A1").Value = teste.innerText

注意
.innerText
不返回对象,因此不能使用Set将其分配给对象类型变量,如
teste

您不需要任何浏览器模拟器从该站点获取上述值。您可以选择xhr,如下所示:

Sub GetValue()
    Dim S$, oVal As Object

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://br.advfn.com/bolsa-de-valores/bmf/DI1F22/cotacao", True
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
        .send
        While .readyState < 4: DoEvents: Wend
        S = .responseText
    End With
    
    With CreateObject("htmlfile")
        .body.innerHTML = S
        Set oVal = .getElementById("quoteElementPiece1")
        
        If Not oVal Is Nothing Then
            MsgBox oVal.innerText
        End If
    End With
End Sub
Sub-GetValue()
Dim S$,椭圆形作为对象
使用CreateObject(“MSXML2.XMLHTTP”)
.打开“获取”https://br.advfn.com/bolsa-de-valores/bmf/DI1F22/cotacao”“是的
.setRequestHeader“用户代理”、“Mozilla/5.0(Windows NT 6.1)AppleWebKit/537.36(KHTML,如Gecko)Chrome/87.0.4280.88 Safari/537.36”
.发送
While.readyState<4:DoEvents:Wend
S=.responseText
以
使用CreateObject(“htmlfile”)
.body.innerHTML=S
Set oVal=.getElementById(“quoteElementPiece1”)
如果不是椭圆形,那就什么都不是了
MsgBox oVal.innerText
如果结束
以
端接头
要执行上述脚本,无需向库添加任何引用