首页 新闻 会员 周边 捐助

MFC CWebBrowser2执行js文件

0
悬赏园豆:200 [待解决问题]

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文件的执行内容。
我想提取比赛的对阵成绩。

豆腐aaa的主页 豆腐aaa | 初学一级 | 园豆:2
提问于:2022-04-07 15:39
< >
分享
所有回答(1)
0

在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请求获取的脚本内容。如果需要获取这些内容,可能需要另外的解决方案。

npe0 | 园豆:1502 (小虾三级) | 2023-12-18 13:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册