我现在要用delphi做一个程序,取得当前浏览器打开的网页中的一个数据,这个数据会不断的变,需要不断的去取
如何实现?注意:浏览器是IE,delphi做的程序是独立于浏览器的最好不用浏览器插件

解决方案 »

  1.   

    js操作xml显示数据,delphi负责把数据写到xml中,实时更新,js保证定时去取,或者请求(页面点击或者其他的事件),来更新数据
      

  2.   

    貌似根本不是所谓网页与DELPHI通讯问题,不就是一个数据采集的过程吗?DELPHI访问网页的方法多了去了,最直接的多快好省的办法就是使用DELPHI的XMLHTTPRequest组件来向网页请求数据,也就是现在臭遍WEB开发论坛的AJAX。或者用DELPHI的WEBBROWSER组件。你要是不愿意用组件,也可以直接使用SOCKET访问网页呀。唯一注意的是,如果网页是自己人写的同时网页很大而你要的数据很小且变化很快,那就加个IFRAME框架装数据,你只要采集那个框架页面很小的数据量就可以了。这样可大大加快数据处理速度,保证相对同步。
      

  3.   

    感谢各位的回答,首先声明一下,IE是独立运行的,也就是说网页已经在IE中打开了,我要从IE中取得网页的数据
      

  4.   

    你的需求和网页的宿主是谁没有关系吧。如果是远程网页,只要服务器是运行着的,换句话说,只要浏览器能访问到这个网页你就可以用DELPHI 采集其上的数据。心动不如行动,你用DELPHI的XMLHTTP组件试一下不就知道是怎么回事了吗?
      

  5.   

    既然是用c/s结构的程序取得b/s结构的网页数据
    那么有一个想法你可以试试
    使用windows自带的一些函数获得窗口名为XXX的页面的内容,不知道能不能实现
    或者获取IE浏览器本地缓存页面的地址,直接读取本地缓存文件,从缓存文件中获取数据,不过那样无法获得本地脚本计算出来的数据
      

  6.   

    回复 toury
    你可能没有理解我的问题,我是要做一个电影字幕的外挂程序,电影是在网页中播放的,网页中有位置显示当前播放的时间,而且这个时间是用javascript脚本输出到网页上的,外挂程序要取得这个时间来调整当前应该播放那条字幕。回复 LonelyStark
    你的想法很好,我已经试过了,但是IE输出网页的时候不是标准的文本框、label等控件,而是一个整体,无法取得里面的文字
      

  7.   

    看来你以前接触这方面的东东不多。1、“时间是用javascript脚本输出到网页”:
    你不要管它是通过上面方式什么办法输出到页面显示的,你只要肯定,这个播放时间已经在网页显示出来就OK了。按照你说的这个情况,那个时间一定是存放于一个<span id='aaa'></span>或<div id='aaa'></div>之类的网页控件里了。2、“IE输出网页的时候不是标准的文本框、label等控件,而是一个整体,无法取得里面的文字”:
    采集就是采集页面的HTML代码,把整个页面的HTML取下来返回到采集器后,用正则筛选需要的数据就可以了。例如,你右键-查看源文件,分析一下那张网页的的代码。假设相关播放时间的代码是这样:
    <div id='currentPeriod'>3:05:89</div>
    那你就用正则得到<div id='currentPeriod'>  </div>去掉HTML代码就可以得到 3:05:89了。3、这个需求正好符合我8楼最后一段的猜测。
      

  8.   

    不需要控件
    你用delphi能否获取到指定IE窗口中所有的<html></html>之间的代码内容呢?
    如果能,那么应该能找到插入时间的那个插入点,比如是div啊td啊什么的
    还不行的话
    偶说实在的如果你的目的只是让人们打开一个网页电影能有字幕
    那么你不如直接用delphi做个播放页面
    播放代码就是IE里显示的代码
    javascript什么的也照抄
    然后delphi在自己的窗口里获取播放时间还不是很简单的事么
      

  9.   

    感谢toury,LonelyStark的回复,但你们的回复不是我想要的,你们对问题的理解还不是太清楚比如我们正在用IE打开土豆网上的视频看,我做的程序是个字幕播放软件,是个独立的软件,不依赖于IE,字幕软件要按照当前的IE打开的视频播放进度来播放字幕,字幕软件只显示字幕。你们所说的方法都是从土豆网上取得html源码,这个不行的,那和现在IE播放的视频没有办法同步。我的问题是从IE中取得当前的播放进度(假设IE的某个位置有播放时间)。
      

  10.   

    有点像游戏外挂的感觉,你的意思,软件安装在客户端,然后实时的根据客户端客户看的那个IE中的页面,来改变客户端网页上的内容?让客户端软件去改变IE已经解析完的网页??不太可能吧。这样子的话,你的软件可以在客户端把用户从服务器上得到的东西全部改掉都行了~~~比木马还木马~~
      

  11.   

    这样子的话,你只能做一个插件,并且在播放视频的页面上引用了这个插件,用这个插件在客户端对客户打开的视频播放画面进行动态的改变。让IE进程之外的软件去改变IE已经从服务器上加载解析后的网页,这个需求还真没遇到过。太过霸道~~
      

  12.   

    是你对偶的提议没理解清楚
    偶不是要你从网站上获取静态的html源码
    是要你用delphi调用windows自带的函数方法之类的实时获得IE窗口中当前的实时数据
    这个数据包括js动态修改的数据即动态改变的播放时间!
    由于偶对delphi和windows本身的函数方法不清楚
    所以才说这个思路问你是否能实现
      

  13.   

    他的前提是不能用浏览器插件。所以比较麻烦。否则用BHO很容易的,呵呵