https://fencing.yy-sport.com.cn/#/game/eventresult?id=100002
这个网址的内容,请问,谁能帮我用MFC 的 CWebBrowser2获取网页的html。我只能获得这样的代码:
<body><div id=app></div>
<script src=/js/chunk-vendors.99d20e1b.js></script>
<script src=/js/app.f4b20724.js></script>
</body>
也就是说没办法获取那两个js文件的执行内容。
我想提取比赛的对阵成绩。
在MFC中,你可以通过以下步骤来获取网页上的JavaScript文件内容:
步骤1: 创建CWebBrowser2
对象,并导航到指定的URL。
CWebBrowser2 m_browser;
m_browser.Navigate(_T("http://www.example.com"), NULL, NULL, NULL, NULL);
步骤2: 在DocumentComplete事件中,获取DOM(Document Object Model)文档对象。
void CYourClass::OnDocumentComplete(LPDISPATCH pDisp, VARIANT* URL)
{
LPDISPATCH lpDisp = m_browser.get_Document();
if(lpDisp != NULL)
{
IHTMLDocument2* pHtmlDoc2 = NULL;
lpDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pHtmlDoc2);
// TODO: 操作DOM文档对象
...
}
}
步骤3: 通过IHTMLDocument2接口,遍历所有的<script>
标签,获取其src属性值或者直接获取其中包含的脚本内容。
void ProcessScripts(IHTMLDocument2* pHtmlDoc2)
{
IHTMLElementCollection* pElemColl = NULL;
pHtmlDoc2->get_scripts(&pElemColl);
if(pElemColl != NULL)
{
long count;
pElemColl->get_length(&count);
for(long i=0; i<count; ++i)
{
VARIANT index;
index.vt = VT_I4;
index.lVal = i;
IDispatch* pElemDisp = NULL;
pElemColl->item(index, index, &pElemDisp);
if(pElemDisp)
{
IHTMLScriptElement* pScriptElem = NULL;
pElemDisp->QueryInterface(IID_IHTMLScriptElement, (void**)&pScriptElem);
if(pScriptElem)
{
BSTR scriptSrc;
pScriptElem->get_src(&scriptSrc);
// TODO: 获取并处理JavaScript文件的URL
...
BSTR scriptText;
pScriptElem->get_text(&scriptText);
// TODO: 获取并处理JavaScript文件的内容
...
}
}
}
}
}
注意,这个方法获取的是网页源代码中的JavaScript文件,并不包括动态加载的或通过AJAX请求获取的脚本内容。如果需要获取这些内容,可能需要另外的解决方案。