【问题标题】:VBA XMLHTTP request doesn't capture dynamic HTML responseVBA XMLHTTP 请求不捕获动态 HTML 响应
【发布时间】:2021-05-27 01:45:26
【问题描述】:

我正在尝试从网页中获取特定的动态图形到 excel,我设法将所有网站获取响应收集到一个“全部”变量中,我应该解析该变量以提取我的数字,除了当我检查字符串变量我可以看到除了所需的动态数字之外的所有内容! :)“附图显示了当时的动态数字是2.19”, 任何想法为什么我要捕捉每一件事,将不胜感激,在此先感谢

我的想法: 1.我猜这些数字是由 JavaScript 或服务器端注入的,可能在我的 XMLHTTP 请求被处理后执行!如果是这种情况,否则我需要您的专业知识

  1. 除非看到特定的 Html 请求标头,否则网站不会响应,所以我可能需要模仿 Chrome 的标头,我不知道它们长什么样?

请查看下面我的代码和我想要捕获的图形的屏幕截图

'Tools>refrences>microsoft xml v3 must be refrenced
Public Function GetWebSource(ByRef URL As String) As String
    Dim xml As IXMLHTTPRequest
    On Error Resume Next
    Set xml = CreateObject("Microsoft.XMLHTTP")
    With xml
        .Open "GET", URL, False
        .send
        GetWebSource = .responseText
    End With
    Set xml = Nothing
End Function

Sub ADAD()
Dim all As Variant
Dim objHTTP As Object
Dim URL As String

Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
all = GetWebSource("https://www.tradingview.com/symbols/CRYPTOCAP-ADA.D/")


pos = InStr(all, "tv-symbol-price-quote__value js-symbol-last")
testString = Mid(all, pos, 200)
'I am supposed to see the dynamic figure within the TAG but it is not showing!!
Debug.Print testString

End Sub

HTML for Dynamic Required values

【问题讨论】:

  • 您可能需要使用浏览器自动化来完成此类任务。要么直接自动化 IE,要么考虑使用 selenium。
  • 请问有什么起点吗?
  • 它使用 websocket 来更新。如果您想变得花哨,您可能会在这里找到一些东西:example-code.com/excel/websocket.asp。就个人而言,我会使用一种具有良好呈现 API 的语言来处理诸如 Python 之类的事情。另外,您是否检查过该公司是否提供任何公共 API?如果你去here,你可以使用 Network > ws > Messages 来监控通过套接字的流量。我的猜测是会有安全措施来防止抓住这个。

标签: javascript html vba xmlhttprequest


【解决方案1】:

@Tim Williams 这是一个使用 selenium 的代码(但它似乎并没有起到获取价值的作用)

PhantomJS Selenium VBA

Sub Test()
    Dim bot As Selenium.PhantomJSDriver
    Set bot = New Selenium.PhantomJSDriver
    With bot
        .Get "https://www.tradingview.com/symbols/CRYPTOCAP-ADA.D/"
        .Wait 2000
        Debug.Print .FindElementByXPath("//div[@class='tv-symbol-price-quote__value js-symbol-last']").Attribute("outerHTML")
    End With
End Sub

Chrome VBA 硒

似乎使用PhantomJS 无法正常工作,所以这里有一个 Chrome 版本的 VBA 中的 selenium

Private bot As Selenium.ChromeDriver

Sub Test()
    Set bot = New Selenium.ChromeDriver
    With bot
        .Start
        .Get "https://www.tradingview.com/symbols/CRYPTOCAP-ADA.D/"
        Debug.Print .FindElementByXPath("//div[@class='tv-symbol-price-quote__value js-symbol-last']").Text 'Attribute("outerHTML")
        .Quit
    End With
End Sub

Python 解决方案

这是我的导师@QHarr 在 cmets 中提供的工作 python 代码

from selenium import webdriver

d = webdriver.Chrome("D:/Webdrivers/chromedriver.exe")
d.get('https://www.tradingview.com/symbols/CRYPTOCAP-ADA.D/')
d.find_element_by_css_selector('.tv-symbol-price-quote__value.js-symbol-last').text

【讨论】:

  • d.FindElementByCss('.tv-symbol-price-quote__value.js-symbol-last').text
  • 这是一个好的开始,但我仍然得到空的 div 标签,而没有使用 ByXpath 和 ByCSS 的值?仍在寻找解决方案
  • @QHarr 使用 CSS 时同样的问题。
  • 奇数。与 python 和 selenium 一起工作得很好。另外,我检查了 websocket 并且可以看到数据。
  • 对不起,是的。我开始修改vba。更正粘贴:pastebin.com/6WingSUe
猜你喜欢
  • 2018-09-05
  • 2020-05-06
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多