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(); 一类是基 ...
随机推荐
- List与字符串转换
1.将list元素用单引号引起来:List<TransferFocusxfSummaryTop3> topList = getTransferFocusxfSummaryTop3(user ...
- 每天一个Linux命令
每天一个Linux命令(1):ls命令 每天一个Linux命令(2):cd命令 每天一个Linux命令(3):pwd命令 每天一个 Linux 命令(4):mkdir 每天一个 Linux 命令(5) ...
- 第五周PSP
16号 类别c 内容c 开始时间s 结束e 中断I 净时间T GUI 学习QT视频 20:00 21:42 20m 82m 17号 类别c 内容c 开始时间s 结束e 中断I 净时间T GUI 学习Q ...
- 【原】升级nginx注意点
1.通知nginx将pid文件改名为nginx.pid.oldbin,并启动新的nginx kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` 2.通知旧 ...
- visudo 使用摘记
1. sudo <command> 免输入密码.root 运行 visudo. 添加命令行:<username> <hostname>=NOPASSWD: & ...
- iOS开发~CocoaPods使用详细说明【转】
一.概要 iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以用来方便的统一管理这些第三方库. 二.安装 由于 ...
- java后台异步任务执行器TaskManager
java后台异步任务执行器TaskManager 此方式基于MVC方式: 一,使用任务: @Resource private TaskManager taskManager; public strin ...
- ASPxSpinEdit 控件的三元判断
方法一:<dx:ASPxSpinEdit ID=" DisplayFormatString="c" Width="100px"></ ...
- Android ImageView显示本地图片
Android ImageView 显示本地图片 布局文件 <?xml version="1.0" encoding="utf-8"?> <R ...
- ERROR 1267 (HY000): Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='
多表查询出错,貌似是编码问题. 我比较的两个表的某个字段,设为查询条件,两个字段等于某个值,参照网上的某些论坛调用alter语句,但是依旧没有效果.最后直接拆分成两个条件,a.字段1=x值,b.字段2 ...