使用 VBA 从网页复制特定文本

Copy particular text from a web page using VBA

我想使用 vba 从网页复制特定文本并将其粘贴到我的宏中。有人可以帮我吗?

我已尝试使用以下代码,但无法使用 vba 从网页获取文本。非常感谢任何帮助。

 Sub get_text_from_web()
    Dim request as Object
    Dim response As String
    Dim html As new HTMLDocument
    Dim website As String
    Dim ab As Variant
    
    website = "http://www.google.com"
    Set request = CreateObject("MSXML2.XMLHTTP")
    request.Open "GET", website, False
    request.Send
    response = StrConv(request.responseBody, vbUnicode)
    html.body.innerHTML = response
    ab = html.getElementsByClassName("gNO89b")(0).innerText
    MsgBox ab
    
    End Sub

您可以使用 xhr 从 google.com 抓取带有 class gNO89b 的元素。但这是搜索按钮,它没有 innertext,而是一个属性 Value,内容为 Google Search.

此外,你显然不能用MSXML2.XMLHTTP读出google.com,而必须用MSXML2.ServerXMLHTTP.6.0。由于我自己也不知道确切的区别,所以我无法解释为什么会这样。

但这还不够。此外,必须指定 UserAgent。这些是客户端发送来标识自己的标识符。可以为 xhr 使用浏览器标识符: .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"

StrConv(request.responseBody, vbUnicode) 行也不适合您。也没有必要先将返回文档的内容写到一个变量中。您可以将其直接复制到所提供的 HTML 文档的正文中: html.body.innerHTML = .responseText

用下面的VBA代码,输出搜索按钮的内容。但我很确定其中的 none 会对您有所帮助。从网页读取数据没有通用的代码。由于每个页面都是单独编程的,因此必须为每个页面开发一个单独的代码。我认为 Google 搜索按钮不是您的目标 ;-)

Sub get_text_from_web()
  Dim html As Object
  Dim website As String
  
  website = "https://www.google.com"
  Set html = CreateObject("htmlFile")
  With CreateObject("MSXML2.ServerXMLHTTP.6.0")
    .Open "GET", website, False
    .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
    .Send
    
    If .Status = 200 Then
      html.body.innerHTML = .responseText
      MsgBox html.getElementsByClassName("gNO89b")(0).getAttribute("value")
    Else
      MsgBox "Page not loaded. HTTP status " & .Status
    End If
  End With
End Sub