枚举所有iframe的IWebBrowser2

// Get the IDispatch of the document.
//
LPDISPATCH lpDisp = NULL;
lpDisp = m_webBrowser.GetDocument(); if (lpDisp)
{
IOleContainer* pContainer; // Get the container.
//
HRESULT hr = lpDisp->QueryInterface(IID_IOleContainer,
(void**)&pContainer);
lpDisp->Release(); if (FAILED(hr))
return hr; // Get an enumerator for the frames.
//
IEnumUnknown* pEnumerator; hr = pContainer->EnumObjects(OLECONTF_EMBEDDINGS, &pEnumerator);
pContainer->Release(); if (FAILED(hr))
return hr; IUnknown* pUnk;
ULONG uFetched; // Enumerate and refresh all the frames.
//
for (UINT i = ; S_OK == pEnumerator->Next(, &pUnk, &uFetched); i++)
{
// QI for IWebBrowser here to see whether we have
// an embedded browser.
IWebBrowser2* pWebBrowser; hr = pUnk->QueryInterface(IID_IWebBrowser2, (void**)&pWebBrowser);
pUnk->Release(); if (SUCCEEDED(hr))
{
// Refresh the frame.
pWebBrowser->Refresh();
pWebBrowser->Release();
}
} pEnumerator->Release();
}

枚举所有iframe的element
HRESULT hr = S_OK;

    try
{
CComPtr<IDispatch> spDispDoc;
hr = m_spWebBrowser->get_Document(&spDispDoc); // find all iframe elements and filter by id, then insert ad js
CComQIPtr<IHTMLDocument2> spDoc2 = spDispDoc; if(spDoc2){
CComQIPtr<IHTMLElementCollection> spAll;
hr = spDoc2->get_all(&spAll);
if (SUCCEEDED(hr)) {
CComPtr<IDispatch> spDispObjects;
// just handle iframes as example
CComVariant varTag = _T("IFRAME");
varTag.vt = VT_BSTR;
hr = spAll->tags(varTag, &spDispObjects); if(SUCCEEDED(hr))
{
CComQIPtr<IHTMLElementCollection> spElementCollection = spDispObjects;
long lObjectCount = ;
if( spElementCollection )
hr = spElementCollection->get_length(&lObjectCount);if (SUCCEEDED(hr) && lObjectCount > )
{
for (int i = ; i < lObjectCount; i++)
{
CComVariant vIndex = i;
CComVariant vEmpty;
CComPtr<IDispatch> spdispObject;
hr = spElementCollection->item(vIndex, vEmpty, &spdispObject);
if (SUCCEEDED(hr))
{
CComQIPtr<IHTMLElement> spElement = spdispObject;
if (spElement)
{
CComBSTR bstrId = _T("");;
long width = , height = ;
spElement->get_id(&bstrId);
spElement->get_offsetHeight(&height);
spElement->get_offsetWidth(&width); if(!IsAcceptableSize(width, height))
continue;
                     CComVariant vSrcUrl = _T("");
hr = spElement->getAttribute(_T("src"), 0, &vSrcUrl);
 } } } } } } } } catch(_com_error &ex) { LPCTSTR errMsg = ex.ErrorMessage(); WriteLog(_T("_com_error: ") + CString(errMsg)); } return hr;


WebBrowser 中遍历所有的frames的更多相关文章

  1. webBrowser中操作网页元素全攻略

    原文 webBrowser中操作网页元素全攻略 1.获取非input控件的值: webBrowser1.Document.All["控件ID"].InnerText; 或webBr ...

  2. Java中遍历Map集合的四种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  3. 关于delphi点击webbrowser中任意一点的问题

    关于delphi点击webbrowser中任意一点的问题 有时候我们需要delphi载入webbrowser1打开网页的时候 需要点击某一个点的位置 可能是坐标 可能是按钮 可能是其他的控件应该如何来 ...

  4. java 中遍历hashmap 和hashset 的方法

    一.java中遍历hashmap:    for (Map.Entry<String, Integer> entry : tempMap.entrySet()) {     String ...

  5. 在 Django 模板中遍历复杂数据结构的关键是句点字符

    在 Django 模板中遍历复杂数据结构的关键是句点字符 ( . ). 实例二 mysit/templates/myhtml2.html修改如下 <!DOCTYPE html> <h ...

  6. C#:WebBrowser中伪造referer,为何对流量统计器无效?

    使用webbrowser伪造referer的方法:webBrowser1.Navigate(url, "_self", null, "Referer:http://www ...

  7. Freemarker中遍历List以及内置函数使用

    在Freemarker应用中经常会遍历List获取需要的数据,并对需要的数据进行排序加工后呈现给用户. 那么在Freemarker中如何遍历List,并对List中数据进行适当的排序呢?一. Free ...

  8. asp.net中遍历界面上所有控件进行属性设置

    * 使用方法: *  前台页面调用方法,重置:    protected void Reset_Click(object sender, EventArgs e)        {           ...

  9. Java中遍历Map的几种方法

      转自: http://blog.csdn.net/wzb56/article/details/7864911 方法分为两类: 一类是基于map的Entry:map.entrySet(); 一类是基 ...

随机推荐

  1. sql创建表格 转载

    http://blog.csdn.net/wuxiaokaixinguo/article/details/8293048 检查数据库中是否存在某个表,不存在则生成该表方法一:IF NOT EXISTS ...

  2. JavaWEB监听器

    1.基本概念 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象 ...

  3. JQ怎么获取margin-left的值

    var margin =$("#Modules .list").css('marginLeft');

  4. js显示当前时间

    闲着没事在闪存里看到有人需要js显示当前时间,就一时兴起写了个. 输出格式:“2013年12月18日 星期三 上午9:05:00 ”. <script type="text/javas ...

  5. velocity模板使用建议

    复杂页面前端模块化的方式: 方式一:iframe 方式二:velocity模板(#parse) 方式一,优点很多,也有缺点,例如页面之间传递参数等: 方式二,页面之间的调用,传参更容易,页面性能更好: ...

  6. SQL笔记-第六章,索引与约束

    一.索引 CREATE INDEX 索引名 ON 表名(字段1, 字段2,……字段n) CREATE INDEX idx_person_nameage ON T_Person(FName,FAge) ...

  7. Python之路【第十六篇】:Django【基础篇】

    Python之路[第十六篇]:Django[基础篇]   Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了O ...

  8. [已解决]EnvironmentError: mysql_config not found

    $ pip install MySQL-python==1.2.5 报错: EnvironmentError: mysql_config not found 原因是缺少包 libmysqlclient ...

  9. 【转载】H264--1--编码原理以及I帧B帧P帧

    ---------------------- 前言 ----------------------- H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码方面,我理解的他的理 ...

  10. android 学习(1)

    第二次发生这种事了,写完啦,手一抖,丢了,这个写完不用博客园了,怪不得用户越来越少 简写 androidstudio安装注意点 1JDK安装需配置环境变量 2安装遇到haxm错误需要进入BIOS打开C ...