Javascript JS中的VBA刮削表

Javascript JS中的VBA刮削表,javascript,vba,web-scraping,html-table,Javascript,Vba,Web Scraping,Html Table,我试图收集所有可能的解决方案来让我的代码正常工作,但不幸的是我被卡住了 我想从两个不同的图形中提取值,这两个图形是在后台由JavaScript生成的 我感兴趣的部分实际上是页面中间的两个图。 “一般游戏统计图表”和右边的图表饼图 html代码如下所示: <div class="block clearfix block_match_stats_plus_chart-wrapper" id="page_match_1_block_match_stats_plus_chart_

我试图收集所有可能的解决方案来让我的代码正常工作,但不幸的是我被卡住了

我想从两个不同的图形中提取值,这两个图形是在后台由JavaScript生成的

我感兴趣的部分实际上是页面中间的两个图。 “一般游戏统计图表”和右边的图表饼图

html代码如下所示:

       <div class="block  clearfix block_match_stats_plus_chart-wrapper" id="page_match_1_block_match_stats_plus_chart_15-wrapper">

  <h2>General Game Stats Chart</h2>


  <div class="content  ">
    <div class="block_match_stats_plus_chart real-content clearfix " id="page_match_1_block_match_stats_plus_chart_15">
      <iframe src='/charts/statsplus/3029238/' style='width: 550px; height: 300px; overflow-y: hidden;' frameborder='no' allowtransparency="true" scrolling="no"> </iframe>
    </div>
  </div>
</div>
<script type="text/javascript" charset="utf-8">

  (function() {
    var block = new Block('page_match_1_block_match_stats_plus_chart_15', 'block_match_stats_plus_chart', null);


    TimestampFormatter.format('page_match_1_block_match_stats_plus_chart_15');
  })();

一般比赛统计表
(功能(){
var block=新块('page\U match\U 1\U block\U match\U stats\U plus\U chart\U 15','block\U match\U stats\U plus\U chart',null);
TimestampFormatter.format('page_match_1_block_match_stats_plus_chart_15');
})();
当图表实际从iFrame加载时,您正在查看“匹配”页面 这是您应该查看的源:

这是JavaScript函数,您应该从中刮取数据

<script type="text/javascript" charset="utf-8">

window.addEvent('domready', function() {

    var chart = new PieChart('Possession');
         chart.addSeries('Possession', [{"name":"Watford FC","y":39},{"name":"Liverpool FC","y":61,"sliced":true}]);

    chart.highChartsOptions.plotOptions.pie.topmargin = '20';
    chart.highChartsOptions.plotOptions.pie.size = "80%";
    chart.highChartsOptions.plotOptions.pie.center = ['50%', '55%'];

    chart.render('page_chart_1_chart_statsplus_1_chart_possession_1-wrapper');

});
</script>

addEvent('domready',function(){
var图表=新PieChart(“占有”);
chart.addSeries('goverage',[{“name”:“Watford FC”,“y”:39},{“name”:“Liverpool FC”,“y”:61,“sliced”:true});
chart.highChartsOptions.plotOptions.pie.topmargin='20';
chart.highChartsOptions.plotOptions.pie.size=“80%”;
chart.highChartsOptions.plotOptions.pie.center=['50%,'55%'];
图表。呈现('page_chart_1_chart_statsplus_1_chart_占有权_1-wrapper');
});

使用MSXML请求应该可以工作。仅加载包含图表的页面可能是获取该信息的最快方式。看起来您只需要看起来像是游戏ID的东西
3029238
,就可以在
https://us.soccerway.com/charts/statsplus/

Option Explicit

Sub Scrape_Stats()
    Dim Clip As Object: Set Clip = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Sheet1")
    Dim html As Object: Set html = CreateObject("htmlfile")
    Dim Text As String

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://us.soccerway.com/charts/statsplus/3029238/", False
        .Send

        While .readyState <> 4: DoEvents: Wend

        html.body.InnerHTML = .responseText
        Text = html.body.getElementsByTagName("Table")(0).outerhtml
    End With

    Clip.SetText Text
    Clip.PutInClipboard

    ws.Range("A2:H1000").ClearContents
    ws.Range("A2").Select
    ws.PasteSpecial Format:="Unicode Text"
    Set Clip = Nothing
End Sub
选项显式
子刮削_统计()
Dim Clip As Object:Set Clip=CreateObject(“新:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}”)
将ws设置为工作表:设置ws=ThisWorkbook.Worksheets(“Sheet1”)
将html设置为对象:设置html=CreateObject(“htmlfile”)
将文本变暗为字符串
使用CreateObject(“MSXML2.XMLHTTP”)
.打开“获取”https://us.soccerway.com/charts/statsplus/3029238/”“错
.发送
While.readyState 4:DoEvents:Wend
html.body.InnerHTML=.responseText
Text=html.body.getElementsByTagName(“表”)(0.outerhtml
以
Clip.SetText文本
夹板
ws.Range(“A2:H1000”).ClearContents
ws.Range(“A2”)。选择
ws.Paste特殊格式:=“Unicode文本”
设置剪辑=无
端接头

你好,萨米,谢谢你的回复。有没有办法直接获取iframe的源或其值?就像我想自动收集表中的所有信息一样。我的意思是,在完全加载页面之后,这些元素应该显示为表,可以通过“GetElementById”方法定位。我尝试将它们解析为xml表单,但失败了。尝试将它们解析为innerHTMLText,但也失败。