怎么获取网页上media player正在播放的歌曲url

时间:2022-11-26 12:54:12
获取网页上media player正在播放的歌曲url,然后就可以保存到本地文件了
theworld或遨游浏览器有这个功能:捕获正在播放的歌曲的地址,alt+鼠标点击就可以保存了

我的思路:通过查看网页代码,使用正则找到.wma或.mp3;
但是音乐网站有防盗链,把音乐的url地址写在javascript里,比如这样: http://www.qq163.com/song/7819/94984.htm
<script language="JavaScript">
<!--
var isFF=(navigator.userAgent.toLowerCase().indexOf("firefox")!=-1)
var objPlayer = document.getElementById("MediaPlayer");
if(isFF){objPlayer=document.MediaPlayer;}
var strFile0 = "/new9/qiang4/0104/3.Wma";
objPlayer.url = s_list+strFile0;
objPlayer.src = s_list+strFile0;
//-->
</script>

<script language="javascript">
PlayerGetState(objPlayer);
var mlid = 94984;
</script>
这个如何处理?
真实地址是:http://wmadd.qq163.com:8181/wmass88/new9/qiang4/0104/3.Wma
这个是动态改变的,只能在播放的时候获取

7 个解决方案

#1


从你贴的js来看,它是通过运行时修改 
objPlayer.url = s_list+strFile0;
objPlayer.src = s_list+strFile0;

var objPlayer = document.getElementById("MediaPlayer");
----------页面中有个 id = "MediaPlayer"的元素


你在运行时用IHTMLDocument3::getElementById() 得到该元素,然后使用IHTMLElement::getAttribute获取其 src/url属性即可 

#2


url是FLASH对象的特定属性,src是MEDIA PLAYER的特定属性,你可以直接从对象获取播放器接口,然后读取对应的属性即可。

#3


使用抓包工具

#4


VOID OnGetHtml(VOID)
{
    IDispatchPtr   spDisp;
    if(WebBrowser->get_Document(&spDisp)   ==   S_OK   &&   spDisp!=   0   )
    {
        MSHTML::IHTMLDocument2Ptr   spHtmlDocument(spDisp);
        MSHTML::IHTMLElementPtr   spHtmlElement;
        spHtmlDocument->get_body(&spHtmlElement);
        HRESULT   hr;
        MSHTML::IHTMLElementCollection*   pColl=NULL;
        hr=spHtmlDocument->get_all(&pColl);
        if(SUCCEEDED(hr))
        {
            MSHTML::IHTMLElement*   pElem=NULL;
            _variant_t   index;
            index.vt=VT_I4;
            index.intVal=0;
            _variant_t   name("MediaPlayer");
            IDispatchPtr   disp;
            disp=pColl->item(name,index);
            if(disp==NULL)
                hr=E_FAIL;
            else
            {
                hr=disp->QueryInterface(&pElem);
            }
            if   (SUCCEEDED(hr)&&   pElem   !=   NULL)
            {
                //
                BSTR   bstrhtml;
                _bstr_t bstrt="url";
                _variant_t  vt;
                vt=pElem->getAttribute(bstrt,0);//  get_outerHTML(&bstrhtml);
                MsgBox((LPCWSTR)_bstr_t(vt));
                //  pElem->click();
                pElem->Release();
            }
        }
    }

谢谢大家,成功了,上面的代码哪些是不是可以省略掉?

#5


还有个问题:
怎么判断网页正在刷新,IWebBrowser::Refresh是让它刷新,怎么截获程序中ie浏览器刷新的消息?

#6


新问题请另外开帖(如果没分了你就开0分贴)
这样也方便后来的人查找。

#7


想学习学习

#1


从你贴的js来看,它是通过运行时修改 
objPlayer.url = s_list+strFile0;
objPlayer.src = s_list+strFile0;

var objPlayer = document.getElementById("MediaPlayer");
----------页面中有个 id = "MediaPlayer"的元素


你在运行时用IHTMLDocument3::getElementById() 得到该元素,然后使用IHTMLElement::getAttribute获取其 src/url属性即可 

#2


url是FLASH对象的特定属性,src是MEDIA PLAYER的特定属性,你可以直接从对象获取播放器接口,然后读取对应的属性即可。

#3


使用抓包工具

#4


VOID OnGetHtml(VOID)
{
    IDispatchPtr   spDisp;
    if(WebBrowser->get_Document(&spDisp)   ==   S_OK   &&   spDisp!=   0   )
    {
        MSHTML::IHTMLDocument2Ptr   spHtmlDocument(spDisp);
        MSHTML::IHTMLElementPtr   spHtmlElement;
        spHtmlDocument->get_body(&spHtmlElement);
        HRESULT   hr;
        MSHTML::IHTMLElementCollection*   pColl=NULL;
        hr=spHtmlDocument->get_all(&pColl);
        if(SUCCEEDED(hr))
        {
            MSHTML::IHTMLElement*   pElem=NULL;
            _variant_t   index;
            index.vt=VT_I4;
            index.intVal=0;
            _variant_t   name("MediaPlayer");
            IDispatchPtr   disp;
            disp=pColl->item(name,index);
            if(disp==NULL)
                hr=E_FAIL;
            else
            {
                hr=disp->QueryInterface(&pElem);
            }
            if   (SUCCEEDED(hr)&&   pElem   !=   NULL)
            {
                //
                BSTR   bstrhtml;
                _bstr_t bstrt="url";
                _variant_t  vt;
                vt=pElem->getAttribute(bstrt,0);//  get_outerHTML(&bstrhtml);
                MsgBox((LPCWSTR)_bstr_t(vt));
                //  pElem->click();
                pElem->Release();
            }
        }
    }

谢谢大家,成功了,上面的代码哪些是不是可以省略掉?

#5


还有个问题:
怎么判断网页正在刷新,IWebBrowser::Refresh是让它刷新,怎么截获程序中ie浏览器刷新的消息?

#6


新问题请另外开帖(如果没分了你就开0分贴)
这样也方便后来的人查找。

#7


想学习学习