WebBrowser 中遍历所有的frames
枚举所有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的更多相关文章
- webBrowser中操作网页元素全攻略
原文 webBrowser中操作网页元素全攻略 1.获取非input控件的值: webBrowser1.Document.All["控件ID"].InnerText; 或webBr ...
- Java中遍历Map集合的四种方法
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...
- 关于delphi点击webbrowser中任意一点的问题
关于delphi点击webbrowser中任意一点的问题 有时候我们需要delphi载入webbrowser1打开网页的时候 需要点击某一个点的位置 可能是坐标 可能是按钮 可能是其他的控件应该如何来 ...
- java 中遍历hashmap 和hashset 的方法
一.java中遍历hashmap: for (Map.Entry<String, Integer> entry : tempMap.entrySet()) { String ...
- 在 Django 模板中遍历复杂数据结构的关键是句点字符
在 Django 模板中遍历复杂数据结构的关键是句点字符 ( . ). 实例二 mysit/templates/myhtml2.html修改如下 <!DOCTYPE html> <h ...
- C#:WebBrowser中伪造referer,为何对流量统计器无效?
使用webbrowser伪造referer的方法:webBrowser1.Navigate(url, "_self", null, "Referer:http://www ...
- Freemarker中遍历List以及内置函数使用
在Freemarker应用中经常会遍历List获取需要的数据,并对需要的数据进行排序加工后呈现给用户. 那么在Freemarker中如何遍历List,并对List中数据进行适当的排序呢?一. Free ...
- asp.net中遍历界面上所有控件进行属性设置
* 使用方法: * 前台页面调用方法,重置: protected void Reset_Click(object sender, EventArgs e) { ...
- Java中遍历Map的几种方法
转自: http://blog.csdn.net/wzb56/article/details/7864911 方法分为两类: 一类是基于map的Entry:map.entrySet(); 一类是基 ...
随机推荐
- ADF_Desktop Integration系列3_ADF桌面集成入门之重定义ADF Desktop Excel
2013-05-01 Created By BaoXinjian
- CSS3图片缩放
鼠标指上去,图片放大,鼠标离开图片恢复原样,并且有放大.缩小效果 Css代码实现:
- Java多线程-线程的同步与锁
一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏.例如:两个线程ThreadA.ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据. package ...
- oracle判断某个字符在字段里出现过几次
SELECT LENGTH(字段名)-LENGTH(REPLACE(字段名,'字符','')) FROM 表名;
- Error: Error #2014: Feature is not available at this time. at flash.filesystem::File$/initDocumentsDir()
Error: Error #2014: Feature is not available at this time. at flash.filesystem::File$/initDocumentsD ...
- Python第十二章正则表达式
1.今天学习的f=open("d:\testcase.xml","r")会报错 需要改成f=open("d:\\testcase.xml", ...
- restfull api
REST 表示状态传输.这是一个体系结构样式,可用于设计网络服务,可以被各种客户端消耗.核心思想是,不使用如CORBA,RPC或SOAP复杂的机制在机器之间进行连接,简单的 HTTP 用于使它们之间调 ...
- petapoco IsNew
// Check if a poco represents a new record public bool IsNew(string primaryKeyName, object poco) { v ...
- 10,SFDC 管理员篇 - 流程自动化
1,Process Builder Setup | Build | Create | Workflow & Approvals | Process Builder 当我们在对象中创建或者修改一 ...
- centos7.x/RedHat7.x重命名网卡名称
从51CTO博客迁移出来几篇博文. 在CentOS7.x或RedHat7.x上,网卡命名规则变成了默认,既自动基于固件.拓扑结构和位置信息来确定.这样一来虽然有好处,但也会影响操作,因为新的命名规则比 ...