CHtmlView浏览器开发遍历页面表单DOM元素
2012-02-17 10:36
519 查看
最近学习 定制浏览器开发,可以使用
CHtmlView 来实现。
又碰到获取表单和给表单赋值
的问题,这样就可以实现自动提交表单的
一个步了。
下面,以 baidu 首页为例,分析知道
要获取 搜索框
<input
name="wd" ...>
我们 重写
OnDocumentComplete
函数,并且在其中处理。
void CHtml1View::OnDocumentComplete(LPCTSTR lpszURL)
{
TRACE("OnDocumentComplete()\n");
IHTMLDocument2* pHtmlDoc2 =(IHTMLDocument2*)CHtmlView::GetHtmlDocument();
//现在只考虑一个 frame 的情况
CComQIPtr<
IHTMLElementCollection > spElementCollection;
CComVariant vppValue = _T("博客"),vppName
= _T("wd");
if(pHtmlDoc2)
{
HRESULT hr = S_OK;
hr = pHtmlDoc2->get_forms(&spElementCollection);
if(FAILED(hr))
{
return;
}
long nFormCount = 0;
//取得表单数
hr = spElementCollection->get_length( &nFormCount );
if(FAILED(hr))
{
pHtmlDoc2->Release();
return;
}
for(long i=0;i<nFormCount;i++)
{
IDispatch* pDisp = NULL;
hr = spElementCollection->item(CComVariant(i),CComVariant(),&pDisp);
if(FAILED(hr))
{
continue;
}
CComQIPtr <IHTMLFormElement> spFormElement = pDisp;
pDisp->Release();
long nElemCount = 0;
//取得表单域数目
hr = spFormElement->get_length( &nElemCount );
if(FAILED(hr))
{
continue;
}
for(long j=0;j<nElemCount;j++)
{
CComDispatchDriver spInputElement;
hr = spFormElement->item(CComVariant(j),CComVariant(),&spInputElement);
if(FAILED(hr)) continue;
CComVariant vName,vVal,vType;
hr = spInputElement.GetPropertyByName(L"name",&vName);
if(vName == vppName)
{
spInputElement.PutPropertyByName( L"value", &vppValue);
}
}
}
}
CHtmlView::OnDocumentComplete(lpszURL);
}
这段代码将会实现在 打开 www.baidu.com 时就自动填写 搜索关键字框
为 "博客",神奇吧,O(∩_∩)O~。
我们还要实现 CHtmlView 调用 javascript 实现自动提交,一步一个脚印,验证我们的执着......
转帖:http://www.haogongju.net/art/53402
CHtmlView 来实现。
又碰到获取表单和给表单赋值
的问题,这样就可以实现自动提交表单的
一个步了。
下面,以 baidu 首页为例,分析知道
要获取 搜索框
<input
name="wd" ...>
我们 重写
OnDocumentComplete
函数,并且在其中处理。
void CHtml1View::OnDocumentComplete(LPCTSTR lpszURL)
{
TRACE("OnDocumentComplete()\n");
IHTMLDocument2* pHtmlDoc2 =(IHTMLDocument2*)CHtmlView::GetHtmlDocument();
//现在只考虑一个 frame 的情况
CComQIPtr<
IHTMLElementCollection > spElementCollection;
CComVariant vppValue = _T("博客"),vppName
= _T("wd");
if(pHtmlDoc2)
{
HRESULT hr = S_OK;
hr = pHtmlDoc2->get_forms(&spElementCollection);
if(FAILED(hr))
{
return;
}
long nFormCount = 0;
//取得表单数
hr = spElementCollection->get_length( &nFormCount );
if(FAILED(hr))
{
pHtmlDoc2->Release();
return;
}
for(long i=0;i<nFormCount;i++)
{
IDispatch* pDisp = NULL;
hr = spElementCollection->item(CComVariant(i),CComVariant(),&pDisp);
if(FAILED(hr))
{
continue;
}
CComQIPtr <IHTMLFormElement> spFormElement = pDisp;
pDisp->Release();
long nElemCount = 0;
//取得表单域数目
hr = spFormElement->get_length( &nElemCount );
if(FAILED(hr))
{
continue;
}
for(long j=0;j<nElemCount;j++)
{
CComDispatchDriver spInputElement;
hr = spFormElement->item(CComVariant(j),CComVariant(),&spInputElement);
if(FAILED(hr)) continue;
CComVariant vName,vVal,vType;
hr = spInputElement.GetPropertyByName(L"name",&vName);
if(vName == vppName)
{
spInputElement.PutPropertyByName( L"value", &vppValue);
}
}
}
}
CHtmlView::OnDocumentComplete(lpszURL);
}
这段代码将会实现在 打开 www.baidu.com 时就自动填写 搜索关键字框
为 "博客",神奇吧,O(∩_∩)O~。
我们还要实现 CHtmlView 调用 javascript 实现自动提交,一步一个脚印,验证我们的执着......
转帖:http://www.haogongju.net/art/53402
相关文章推荐
- CHtmlView 浏览器 开发 遍历 页面表单DOM元素
- 自定义 定制 浏览器 开发 遍历 页面表单DOM元素
- 移动端开发,IOS、iPhone,表单input元素获取焦点时页面被放大的解决办法。
- 浏览器中开发人员工具快速找到dom元素绑定那些JS事件
- 移动端开发,IOS、iPhone,表单input元素获取焦点时页面被放大的解决办法。
- DOM学习笔记---遍历页面所有元素节点
- 浏览器的自动补全问题 autocomplete,刷新页面表单元素还是展示修改后的值
- WSS3.0开发--页面定制(1)--修改列表的表单页面
- DOM遍历元素节点时忽略空格文本节点的方法
- 小程序开发踩坑:页面窗口定位(相对于浏览器定位)
- 关于页面开发的安全,防止重复提交以及浏览器拦截策略
- [Web 开发] 获取页面元素的坐标及大小
- 使用selenium+python;在页面A点击一个按钮跳转到页面B,页面A没有关闭,浏览器打开了一个B,切换窗口定位页面B的元素
- 使用IntelliJ IDEA开发Java Web项目时,修改了JSP后刷新浏览器无法及时显示修改后的页面
- selenium实现浏览器截屏,拖拽页面元素
- JQuery为页面Dom元素绑定事件及解除绑定方法
- 移动前端页面开发:实现页面元素拖动
- 快速解决js动态改变dom元素属性后页面及时渲染的问题
- JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码