menu
more_vert
利用WebBrowser控件实现百度自动搜索

作者:dayu

技术分享

技术分享

(3)添加类CWebBrowser2的头文件和实现

右键点击项目->添加->类->Visual C++ -> MFC->ActiveX控件中的MFC类->点击添加按钮->从注册表来源添加类,可用的ActiveX控件选择Microsoft Web Browser<1.0>->接口选择IWebBrowser2->点击>按钮->点击完成按钮,就可以将CWebBrowser2.h和CWebBrowser2.cpp添加到项目中,XXXdlg.h中包含头文件

#include"CWebbrowser2.h",定义变量CWebBrowser2m_web;

(4)XXXdlg.cpp的DoDataExchange中添加将控件与变量动态绑定

DDX_Control(pDX,IDC_EXPLORER1,m_web);

(5)XXXdlg.cpp的初始化函数中添加

VARIANTvt;

COleVariantvaUrl=_T("http://www.baidu.com");

m_web.Navigate2(vaUrl,&vt,&vt,&vt,&vt);

运行程序,可以看到自动加载百度页面。

技术分享

(6)XXXdlg.h中添加一下声明,用于当页面加载完成后进一步操作页面

DECLARE_EVENTSINK_MAP()

voidDocumentCompleteExplorer(LPDISPATCHpDisp,VARIANT*URL);

(7)XXXdlg.cpp中添加

BEGIN_EVENTSINK_MAP(CbaiduDlg,CDialogEx)

ON_EVENT(CbaiduDlg,IDC_EXPLORER1,259,CbaiduDlg::DocumentCompleteExplorer,VTS_DISPATCHVTS_PVARIANT)

END_EVENTSINK_MAP()

(8)实现DocumentCompleteExplorer

分析百度源码可以得到输入框的id是kw1,按钮的id是su1。由于百度页面标签变化,自己注意替换。

技术分享

技术分享

[cpp]view plaincopy


  1. <spanstyle="font-size:18px;">voidCbaiduDlg::DocumentCompleteExplorer(LPDISPATCHpDisp,VARIANT*URL)
  2. {
  3. HRESULThr;
  4. LPUNKNOWNlpUnknown;
  5. LPUNKNOWNlpUnknownWB=NULL;
  6. LPUNKNOWNlpUnknownDC=NULL;
  7. IHTMLElementCollection*objAllElement=NULL;
  8. IHTMLDocument2*objDocument=NULL;
  9. CStringstrUrl,strTemp;
  10. lpUnknown=m_web.GetControlUnknown();
  11. ASSERT(lpUnknown);
  12. if(lpUnknown)
  13. {
  14. hr=lpUnknown->QueryInterface(IID_IUnknown,(LPVOID*)&lpUnknownWB);
  15. ASSERT(SUCCEEDED(hr));
  16. if(FAILED(hr))
  17. return;
  18. hr=pDisp->QueryInterface(IID_IUnknown,(LPVOID*)&lpUnknownDC);
  19. ASSERT(SUCCEEDED(hr));
  20. if(SUCCEEDED(hr)&&lpUnknownWB==lpUnknownDC)
  21. {
  22. //Thedocumenthasfinishedloading.
  23. strUrl=m_web.get_LocationURL();
  24. if(strUrl.IsEmpty())
  25. {
  26. return;
  27. }
  28. objDocument=(IHTMLDocument2*)m_web.get_Document();
  29. objDocument->get_all(&objAllElement);
  30. if(strUrl==_T("http://www.baidu.com/"))
  31. {
  32. CComPtr<IDispatch>pDisp;
  33. objAllElement->item(COleVariant(_T("kw1")),COleVariant((long)0),&pDisp);
  34. CComQIPtr<IHTMLElement,&IID_IHTMLElement>pElement;
  35. if(pDisp==NULL)
  36. {
  37. return;
  38. }
  39. else
  40. {
  41. pElement=pDisp;
  42. pElement->put_innerText(_T("测试"));//填充表单
  43. }
  44. VARIANTname;
  45. CComBSTRtag;
  46. longindex;
  47. objAllElement->get_length(&index);
  48. name.vt=VT_I4;
  49. for(longi=0;i<index;i++)//遍历所有元素,通过id属性获取值
  50. {
  51. name.lVal=i;
  52. IDispatch*pDispatch=NULL;
  53. objAllElement->item(name,name,&pDispatch);
  54. IHTMLElement*spElement;
  55. pDispatch->QueryInterface(IID_IHTMLElement,(void**)&spElement);
  56. BSTRtag;
  57. spElement->get_id(&tag);
  58. CStringss(tag);
  59. if(ss=="su1")
  60. spElement->click();
  61. spElement->Release();
  62. }
  63. }
  64. }
  65. }
  66. if(lpUnknownWB)
  67. lpUnknownWB->Release();
  68. if(lpUnknownDC)
  69. lpUnknownDC->Release();
  70. }</span>

运行可以看到百度自动搜索

技术分享

附:VS2008平台源码下载

利用WebBrowser控件实现百度自动搜索

原文地址:http://www.cnblogs.com/sanler/p/7249300.html