利用WebBrowser控件实现百度自动搜索
2018-06-18 04:11:32来源:未知 阅读 ()
(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平台源码下载
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:C#发送GET与POST请求
- 利用反射给对象按顺序赋值 2020-05-28
- 如何利用Spring Boot 整合微信小程序实现登录与增删改查(含 2020-05-20
- Java 添加、删除Excel表单控件 2020-04-01
- 利用Java实现指定文件夹下的照片以自定义格式移动 2020-03-12
- Tornadofx学习笔记(2)——FxRecyclerView控件的打造 2020-02-06
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash