利用WebBrowser控件实现百度自动搜索
来源:互联网 发布:java 代码生成器 编辑:程序博客网 时间:2024/05/16 15:16
更多精彩内容,请见:http://www.16boke.com
(1)新建一个MFC对话框项目
(2)对话框中添加WebBrower控件,添加方法:点击菜单栏工具->选择工具箱项->在弹出的选择工具箱项对话框选择COM组件->Microsoft Web Browser->确定,添加到对话框中即可。
(3)添加类CWebBrowser2的头文件和实现
右键点击项目->添加->类->Visual C++ -> MFC->ActiveX控件中的MFC类->点击添加按钮->从注册表来源添加类,可用的ActiveX控件选择Microsoft Web Browser<1.0>->接口选择IWebBrowser2->点击>按钮->点击完成按钮,就可以将CWebBrowser2.h和CWebBrowser2.cpp添加到项目中,XXXdlg.h中包含头文件
#include "CWebbrowser2.h",定义变量CWebBrowser2 m_web;
(4)XXXdlg.cpp的DoDataExchange中添加将控件与变量动态绑定
DDX_Control(pDX, IDC_EXPLORER1, m_web);
(5)XXXdlg.cpp的初始化函数中添加
VARIANT vt;
COleVariant vaUrl=_T("http://www.baidu.com");
m_web.Navigate2(vaUrl,&vt,&vt,&vt,&vt);
运行程序,可以看到自动加载百度页面。
(6)XXXdlg.h中添加一下声明,用于当页面加载完成后进一步操作页面
DECLARE_EVENTSINK_MAP()
void DocumentCompleteExplorer(LPDISPATCH pDisp, VARIANT* URL);
(7)XXXdlg.cpp中添加
BEGIN_EVENTSINK_MAP(CbaiduDlg, CDialogEx)
ON_EVENT(CbaiduDlg, IDC_EXPLORER1, 259, CbaiduDlg::DocumentCompleteExplorer, VTS_DISPATCH VTS_PVARIANT)
END_EVENTSINK_MAP()
(8)实现DocumentCompleteExplorer
分析百度源码可以得到输入框的id是kw1,按钮的id是su1。由于百度页面标签变化,自己注意替换。
<span style="font-size:18px;">void CbaiduDlg::DocumentCompleteExplorer(LPDISPATCH pDisp, VARIANT* URL){HRESULT hr;LPUNKNOWN lpUnknown;LPUNKNOWN lpUnknownWB = NULL;LPUNKNOWN lpUnknownDC = NULL;IHTMLElementCollection *objAllElement=NULL;IHTMLDocument2 *objDocument=NULL;CString strUrl,strTemp;lpUnknown = m_web.GetControlUnknown();ASSERT(lpUnknown);if (lpUnknown){hr = lpUnknown->QueryInterface(IID_IUnknown,(LPVOID*)&lpUnknownWB);ASSERT(SUCCEEDED(hr));if (FAILED(hr))return;hr = pDisp->QueryInterface(IID_IUnknown, (LPVOID*)&lpUnknownDC);ASSERT(SUCCEEDED(hr));if (SUCCEEDED(hr) && lpUnknownWB == lpUnknownDC){// The document has finished loading.strUrl=m_web.get_LocationURL();if (strUrl.IsEmpty()){return ;}objDocument=(IHTMLDocument2*)m_web.get_Document();objDocument->get_all(&objAllElement);if (strUrl==_T("http://www.baidu.com/")){CComPtr<IDispatch>pDisp;objAllElement->item(COleVariant(_T("kw1")),COleVariant((long)0),&pDisp); CComQIPtr<IHTMLElement, &IID_IHTMLElement>pElement;if(pDisp==NULL){return;}else{pElement=pDisp;pElement->put_innerText(_T("测试")); //填充表单}VARIANT name; CComBSTR tag; long index; objAllElement-> get_length(&index); name.vt=VT_I4;for(long i=0; i <index; i++)//遍历所有元素,通过id属性获取值{ name.lVal = i;IDispatch * pDispatch=NULL; objAllElement-> item(name,name,&pDispatch); IHTMLElement* spElement; pDispatch-> QueryInterface(IID_IHTMLElement, (void**)&spElement); BSTR tag; spElement->get_id(&tag); CString ss(tag); if(ss == "su1") spElement->click();spElement->Release();}}}}if (lpUnknownWB)lpUnknownWB->Release();if (lpUnknownDC)lpUnknownDC->Release();}</span>
运行可以看到百度自动搜索
附:VS2008平台源码下载
更多精彩内容,请见:http://www.16boke.com
- 利用WebBrowser控件实现百度自动搜索
- 利用WebBrowser控件实现百度自动搜索
- 利用WebBrowser控件实现百度自动搜索
- MFC利用webbrowser控件实现简单的自动登陆
- 利用WebBrowser控件自动上传文件
- c++ 实现百度自动搜索
- [转载]利用webBrowser实现自动提交页面的方法
- 利用jsonp实现百度搜索下拉框
- webBrowser控件实现自动登录Gmail邮件的实例
- jquery 实现类似于百度自动匹配搜索
- 利用WebBrowser控件进行打印,隐藏控件
- 利用webBrowser实现万能打印
- delphi : webbrowser实现自动登录
- AJAX实现百度谷歌搜索自动填充
- JQuery+ajax实现类似百度搜索自动匹配功能
- JQuery+ajax实现类似百度搜索自动匹配功能
- ssh框架下实现百度搜索自动补全功能
- 利用WebBrowser控件创建自己的浏览器
- poj2506--Tiling
- 项目实践
- 栈应用--斐波拉契数列
- leetcode之ZigZag Conversion
- c# 编写Windows服务程序
- 利用WebBrowser控件实现百度自动搜索
- PAT A 1053. Path of Equal Weight (30)
- Javascript 函数parseInt()转换丢失精度出现bug
- Joseph圆圈报数问题解法
- Windows下Nginx的安装与配置
- solr 查询参数说明
- 测试之路一 测试脚本设计和测试场景设置
- 复审在美国的章程德佑介绍
- Perl数据结构--数组