delphi 关于dom元素获取。 (使用mshtml IHTMLDocument)进入看详情!

geekjack 2013-01-25 12:17:34
由于需求要求,要抓取某个特殊html页面的某些信息。
我认为引入webbrowser的document来管理dom将是很不错的选择,因此我这边选用IHTMLDocument2来解决这个问题。(webbrowser不显示,利用它的document来工作)

但是这个过程中遇到这样一个问题:


<div class='aha_class' id='aha_id'>
<ul>
<li><a href='./aa.php'>a_text</li>
<li><a href='./bb.php'>b_text</li>
<li><a href='./cc.php'>c_text</li>
</ul>
</div>


假设这个html文件中有上面这段代码,我可以调用IHTMLDocument3的GetElementById('aha_id');来获取到这个div元素。
IHTMLElement divElement := Doc.GetElementById('aha_id');

但是接下来要如何去遍历<ul><li>...</li>...</ul>呢? 从而提取出信息

a_text
b_text
c_text


-----------------------------------------------------------------
另外,在编程中看到一个QueryInterface的东东,网上说是COM的一个接口查询,不是很懂,在Delphi中一般都是怎么用这个方法的呢?


求指教!哈哈
...全文
939 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
geekjack 2013-01-26
  • 打赏
  • 举报
回复
引用 3 楼 t1122 的回复:
递归或者循环查呗,剩下就是最基本的语句的问题了……
恩 对这个不是很熟悉 已经解决了 3q!
t1122 2013-01-25
  • 打赏
  • 举报
回复

var  
  i, j,m,n: integer;  
  ovTable,ovTableul: OleVariant;  

[delphi] view plaincopyprint?
//这一部分是取得“无序列表”的部分  
ovTable:=Webbrowser1.OleObject.Document.getElementsByTagName('ul').item(0);  
ovTableul:=ovTable.getElementsByTagName('li');  
  
n:=ovTableul.Length;  
  
if n>0 then  
begin  
  for i:=0 to n-1 do  
  begin  
    self.Memo1.Lines.Add(ovTableul.item(i).InnerText);  
  end;  
end;  
t1122 2013-01-25
  • 打赏
  • 举报
回复
递归或者循环查呗,剩下就是最基本的语句的问题了……
geekjack 2013-01-25
  • 打赏
  • 举报
回复
引用 1 楼 t1122 的回复:
Delphi/Pascal code?123var i, j,m,n: integer; ovTable,ovTableul: OleVariant; Delphi/Pascal code?1234567891011121314[delphi] view plaincopyprint?//这一部分是取得“无序列表”的部分 ovTable:=Webbro……
嗯 这个有想过 但是如果无序列表不只一份呢? 比如说


  <div class='aha_class' id='aha_id_A'>
      <ul>
         <li><a href='./aa.php'>a_text</li>
         <li><a href='./bb.php'>b_text</li>
         <li><a href='./cc.php'>c_text</li>
      </ul>
  </div>


  <div class='aha_class' id='aha_id_B'>
      <ul>
         <li><a href='./aa.php'>a_text</li>
         <li><a href='./bb.php'>b_text</li>
         <li><a href='./cc.php'>c_text</li>
      </ul>
  </div>

这样如何取得id=aha_id_B下面的列表呢?
WebBrowser 本WebBrowser编程技术包括Delphi、C#、VC++、VB等编程资料的集合,其中的 实例大多以Delphi为示例讲解,Delphi7 IDE开发环境。 IE_WebBrowser编程技巧 修改WebBrowser的header信息? Delphi查看WebBrowser提交之前的数据头 用TWebBrowser组件在DELPHI中POST数据和取得网页源文件 在 WebBrowser 中直接载入流,不通过文件 判断下载网页成功 WebBrowser 失去焦点问题的解决 添加到收藏夹和整理收藏夹 使WebBrowser获得焦点 提取网页中所有链接 Web字体大小 Web命令操作 WebBrowser Navigate 中的 参数 EmptyParam Web控件不缓存网页,也不从缓存中读取 禁止WebBrowser复制 CTRL+C 在WebBrowser窗口上模拟KeyBd_Event 在使用WebBrowser控件,先要 初始化和结束程序后要终止化(Initialization & Finalization) 自定义浏览器上下文菜单 自定义浏览器 C#中调用WebBrowser查看源文件的功能 ----------------------------------- WebBrowser与MSHTML 直接在WebBrowser中写HTML字符串 在webbrowser中查找字符串并定位 把图片拷贝进剪贴板 IHTMLDocument的ExecCommand 处理事件的Internet Explorer中的DOM 禁止WebBrowser右键弹出菜单 禁止TWebBrowser图像显示 访问HTMLDOM使用WebBrowser 如何填写空白(about:blank)页的表单 屏蔽WebBrowser的Javascript 创建运行时的IHTMLDocument而不在WebBrowser内 HOOK Webbrowser 替换WebBrowser的窗口过程 Microsoft.XMLHttp的属性和方法的简介及使用 ------------------------ IE相关的 清空IE缓存 单独删除某一URL的缓存 清空历记录 读取IE历史记录 防止脚本关闭WebBrowser 连接是否有效 InternetCheckConnection res协议可以使浏览器显示储存在资源中HTML 往IE中嵌入工具条 阻断弹出式广告的BHO 自动填表的IE面板插件 使用Delphi开发IE按钮扩展 使用Delphi开发IE右键菜单扩展 IE异步可插入协议扩展 Delphi开发IE下载扩展 创建3721样式的Google搜索扩展 HTML代码过滤技术 GetDefaultBrowser 得到的HTML代码的IE窗口 下载网址wininet ------------------------------- 注意啦,需要HTF 阅读器:http://sites.google.com/site/htfresource/home

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧