VBA Скребковые столы в JS - PullRequest
0 голосов
/ 03 марта 2020

Я пытался собрать все возможные решения, чтобы заставить мой код работать, но, к сожалению, я застрял.

Я хочу собрать значения из двух разных графиков, которые генерируются из JavaScript в фоновом режиме.

https://us.soccerway.com/matches/2019/12/14/england/premier-league/liverpool-fc/watford-football-club/3029238/

Интересующий меня раздел на самом деле представляет собой два графика в середине страницы. «Общая таблица статистики игры» и диаграмма p ie справа.

код 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');
  })();

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Использование запроса MS XML должно работать. Загрузка только страницы с диаграммой, вероятно, самый быстрый способ получить эту информацию. Похоже, вам просто нужен идентификатор игры 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
0 голосов
/ 03 марта 2020

Вы просматриваете страницу «Соответствие», в то время как диаграммы фактически загружаются из iFrame. Это источник, на который вы должны смотреть: https://us.soccerway.com/charts/statsplus/3029238/

И это это 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>
...