我正在尝试抓取一个网站,该网站具有某种 Flash 插件,该插件在我检索 html 后正在加载数据。页面中接收到以下对象
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" WIDTH="250" HEIGHT="20" id="Preloader"><PARAM NAME="movie" VALUE="/images/preloader.swf">
<PARAM NAME="quality" VALUE="high">
<PARAM NAME**strong text**="bgcolor" VALUE="#FFFFFF"><EMBED src="/images/preloader.swf" quality="high" bgcolor="#FFFFFF" WIDTH="250" HEIGHT="20" NAME="Preloader" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT>
我试图找到在wireshark上收到的数据,但没有运气。我对这个 Flash 插件或其工作原理的了解为零。我猜测最坏的情况是我无法做到这一点。
HttpWebRequest mainRequest = (HttpWebRequest)(WebRequest.Create(URL));
mainRequest.Method = "GET";
mainRequest.Proxy = null;
WebResponse mainResponse = mainRequest.GetResponse();
StreamReader dataReader = new StreamReader(mainResponse.GetResponseStream(), System.Text.Encoding.UTF8);
string data = dataReader.ReadToEnd();
dataReader.Close();
mainResponse.Close();
return data;
有谁知道我可以接收这些数据或让 webresponse 等待数据在收到之前注入到 html 的方法。任何帮助将不胜感激。
更新:看来我可能对闪光物体有点过火了。我认为这只是表格填充时的加载动画。我一直在使用提琴手看看发生了什么。该页面在一个加载 div 和包含在其中的 flash 对象的请求之后返回。几秒钟后,当数据准备好时,另一个页面与数据一起返回。据我所知(我不在家,所以现在无法确认)新页面与原始页面具有相同的请求标头。fiddler 中没有 json 或 ajax 数据。客户端上没有脚本可以引起我可以看到的刷新。我不明白是什么导致了这个更新。
我简要地查看了网络浏览器对象,但我想当我抓取大约 200 个页面时,这将是一个相当大的性能损失,目前需要一分钟左右。稍后我将尝试 amf 查看器以确认 flash 对象不是更新源。
我猜测服务器在准备好表格时会导致重新发送此页面。如果服务器正在查找加载 div 并将其替换为数据表,这会导致整个页面被重新发送吗?或者这不会出现在 ajax/json 数据中吗?如果是服务器重新发送数据,我怎样才能保持响应打开,直到它准备好发送新页面?
谢谢。JM。