文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>再谈获取Ajax网页内容的方法

再谈获取Ajax网页内容的方法

时间:2010-09-30  来源:garfieldtom

以前做过一个自动收集网页内容的工具,使用的还可以,用Indy的IdHttp组件来获取网页内容然后分析处理。

现在很多网站都采用了Ajax技术,网页内容异步刷新,所以使用IdHttp组件就无法获取完整的网页内容了。我在

http://www.cnblogs.com/GarfieldTom/archive/2009/12/09/1620184.html

中提到了如果网页内容获取完毕后,可以获取完整的网页内容,可没有一个好的方法来判断网页中的Ajax是否执行完毕,即判断网页的内容是否已完全获取。

 

上网查了许多资料,有种技术倒可以实现,但比较麻烦,要分析网页的DOM机构,然后调用相关的Ajax来获取全部网页,也有人为此申请了专利。

 

我对DOM几乎没有研究,于是想通过一个别的办法来实现。其实网页在执行完Ajax后,内容会有变化的,于是就决定使用一个比较笨的办法来获取网页内容:通过判断网页内容的变化来判断Ajax是否执行完毕。

 

 

代码  1 wbContent.Navigate(vURL);
 2 
 3     Result:=GetHtml(wbContent);
 4 
 5     while not ContainsText(Result,'共找到') do
 6     begin
 7       Sleep(100);
 8       Application.ProcessMessages;
 9       Result:=GetHtml(wbContent);
10     end;
11 
12     Result:=GetHtml(wbContent);

 

 

其中:

 

代码 function GetHtml(const WebBrowser:TWebBrowser): string;
var
  Doc: IHTMLDocument2;
begin
  Doc := WebBrowser.Document as IHTMLDocument2;
  if Assigned(Doc) and Assigned(Doc.body) then
    Result := Doc.body.OuterHtml; //也可以用innerHTML取得其HTML文本
end;

 

 

这样就可以实现获取如果Ajax返回内容有特定信息的网页内容。上面的“共找到”即只有在Ajax执行完毕后长会出现的内容。

当然,这种方法不如上面提到的分析DOM机构来执行的方法好,并且该方法有一定的局限性。但可以简单地实现获取某些含Ajax内容的网页信息。

 

希望在此方面有经验的大侠们多多指教。

 

相关阅读 更多 +
排行榜 更多 +
马里奥赛车世界游戏手机版下载

马里奥赛车世界游戏手机版下载

赛车竞速 下载
无畏契约皮肤开箱器手游下载

无畏契约皮肤开箱器手游下载

休闲益智 下载
旭日之城官方正版下载

旭日之城官方正版下载

策略塔防 下载