Javascript JS中的VBA刮削表
我试图收集所有可能的解决方案来让我的代码正常工作,但不幸的是我被卡住了 我想从两个不同的图形中提取值,这两个图形是在后台由JavaScript生成的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_
我感兴趣的部分实际上是页面中间的两个图。 “一般游戏统计图表”和右边的图表饼图
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,但也失败。