最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【workaround】C#中,已获得IE9浏览器的子页面,如何获得子页面中的播放器插件(WMP)

C# crifan 2150浏览 0评论

【背景】

C#程序中,已经获得了对应的IE浏览器的某个子页面:

【已解决】C#的窗体程序中,想要获得(IE9)浏览器的进程,以及其下的对应某个子窗口

现在希望获得该子页面中,包含的播放器插件WMP,获得其中正在播放的歌曲的信息:

当前Songtaste播放页面中的WMP

【解决过程】

1.找到:mshtml.HTMLDocumentClass in C#,现在想到,是否可以从上述网页的源码中,找到对应播放器的元素,id等信息,然后看看是否可以获得对应的WMP插件的信息。

2.折腾后发现,貌似想要获得对应的插件WMP正在播放的歌曲的信息,好像比较麻烦。

所以,此处,暂时不弄这个了。

因为先说一下我的目的,是获得当前songtaste中正在播放歌曲的id即可,比如歌曲id是3028392,那么对应的歌曲地址就是:http://songtaste.com/song/3028392,然后我就可以去下载对应歌曲了,所以我下载到正在播放的歌曲,是主要目的,此处转为想办法去获得当前正在播放的歌曲的id即可。

3. 后来通过IE9的F12,去调试javascript发现,对应的保存当前正在播放歌曲的id是cur_sid这个变量,对应的保存所有当前打开的歌曲的id的列表,是变量arr_ids。

也可以通过对应的网页源码html中看到对应的值,比如:

var arr_ids = new Array(2988400,462078,1581014,3022259,3019660,3024942,3015928,1525636,2031060,3028392,1906378,2760214,3025862,155789,2472444,3028350,3027942,2957776,218793,3015580,2510328,1196346,3027329,1284399,3027284,3028381,2064629,1588508,0);
var cur_sid = arr_ids[0];

所以,现在就是想办法,得到对应的cur_sid即可。

5.参考:C# webbrowser控件技巧(取得javascript变量值, 禁止显示脚本错误),最后是可以通过如下代码获得对应的cur_sid:

mshtml.HTMLDocument doc = (mshtml.HTMLDocument)iw.Document;
IHTMLWindow2 vWindow = doc.parentWindow;
Type vWindowType = vWindow.GetType();
object cur_sid = vWindowType.InvokeMember("cur_sid", BindingFlags.GetProperty, null, vWindow, new object[] { });
int curSongId = (int)cur_sid;

但是此处测试结果是,cur_sid始终是不变的,即对于我当前播放歌曲换成下一首了,该值还是不变,所以不是我要的效果。

6.后来通过IE9的F12调试和查看网页源码,最后找到了,可以通过获得元素songid获得当前正在播放的歌曲,对于获得当前songid的代码如下:

mshtml.HTMLDocument doc = (mshtml.HTMLDocument)iw.Document;
string songidStr = ((HTMLInputTextElement)doc.getElementById("songid")).value;
string songUrl = "http://songtaste.com/song/" + songidStr + "/";

【总结】

获得对应的mshtml的HTMLDocument类型变量后:

1.想要获得网页中某个值,可以通过对应的:

(HTMLInputTextElement)doc.getElementById("xxx")).value

来获得。

2.想要获得网页中某个javascript中的变量的话,可以通过这样获得:

IHTMLWindow2 vWindow = doc.parentWindow;
Type vWindowType = vWindow.GetType();
object xxx = vWindowType.InvokeMember("xxx", BindingFlags.GetProperty, null, vWindow, new object[] { });

转载请注明:在路上 » 【workaround】C#中,已获得IE9浏览器的子页面,如何获得子页面中的播放器插件(WMP)

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.190 seconds, using 22.11MB memory