关于获取解析网易云音乐网页源码问题,脚本加载完后的....

发布于 2021-11-23 21:18:46 字数 610 浏览 931 评论 12

网址:http://music.163.com/#/m/search?s=%E6%B7%B1%E7%88%B1&_page=search&type=10
用WebClient,WebBrower 获取的源码都是不完整的没有加载完脚本的.
试过许多第三方的库:HtmlAgilityPack,nsoup,SgmlReader,Winista.Htmlparser 都没有办法解决.
解析效果最好的属Opera的检查元素和IE的开发者工具.
但是又不懂.NET怎么去调用这些工具.

求助..................................................................


在页面上看到的链接和图片 在源码里面完全看不到 都是脚本生成的


有试过用mshtml 去执行javascript,但是源码里面的javascript 都不带名字的,最后还是不成了.



如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(12

浮生未歇 2021-11-24 03:03:18

不知道你用AAUTO解析出来网页源码是怎样的,但是.NET的WebBrower解析出来的是这样的:<a class="s-fc0 f-thide xtag" href="#/m/artist?id=${artist.id}">${artist.name|mark}</a>

千纸鹤带着心事 2021-11-24 03:03:18

phtantomjs很强大,但是和.NET交互这个貌似不那么容易.比如说我做一个程序调用phtantomjs加载一个网页,加载完后怎么把网页传递给程序........

眼眸里的那抹悲凉 2021-11-24 03:03:16

回复
outerHTML 得到的是js处理后的源码,见上面的截图( 调用document.write回写到页面上了 )。注意aauto里用了wait...() 等函数,你得到处理前的,可能是没有等待处理完成。简单的你可以加个延时试试。

岁月打碎记忆 2021-11-24 03:02:49

回复
真的是解析出来的网页源码不一样,.NET的WebBrower有个DocumentCompleted事件,这个事件就是网页完整加载后触发的,但是即使是这样出来的源码还是<a class="s-fc0 f-thide xtag" href="#/m/artist?id=${artist.id}">${artist.name|mark}</a>

睫毛上残留的泪 2021-11-24 03:01:58

回复
DocumentCompleted 事件并不是指JS执行完成了,打个比方用JS写个定时器,DocumentCompleted怎么可能知道?!其实很简单判断下所有节点的状态,简单的写个循环没解析完就延时吧。AAU只不过是自动做了这些工作。

等你爱我 2021-11-24 03:01:29

回复
谢谢你,我再试试看

百思不得你姐 2021-11-24 03:01:19

WebBrower 肯定是可以的,不过要处理下框架跨域,另外应当用DOM属性才能获取JS执行后的源码。

上面是运行效果,下面是 AAuto源码(调用 WebBrower , .Net同理 ):

import win.ui;
/*DSG{{*/
var winform = win.form( text="正在获取框架源码......";bottom=399;right=599) 
/*}}*/

import web.form;
import web.form.util;
web.form.util.crossDomain();
 
var wb = web.form( winform  );  
winform.show() 

wb.go("http://music.163.com/#/m/search?s=%E6%B7%B1%E7%88%B1&_page=search&type=10") 
wb.wait();
  
wbIframe = wb.getWebForm("g_iframe") 
var tEle = wbIframe.waitQueryEles(  className="s-fc0" )

//获取所有歌名
var str = ""
for(k,ele in tEle){
	str = str + "<br>" + ele.outerHTML;
}
wb.write(str )
 
win.loopMessage();

冬天旳寂寞 2021-11-24 03:01:14

selenium rc 这个库 用.net编译出来的可执行文件 放到其他电脑上面 学要安装selenium rc吗?

笑红尘 2021-11-24 03:01:05

回复
不太清楚,我本身是做OC这块的,selenium我是用的python做的。

回忆凄美了谁 2021-11-24 03:00:27

回复
谢谢!

情痴 2021-11-24 02:59:27

我以前做过类似的功能,只不过抓得时issuu的,后来发现有api可以模拟,就没有模拟浏览器了,我之前用的是selenium这个库,可以解决楼主的问题,有问题可以联系。

辞别 2021-11-24 01:46:48

坐等大神!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文