1.独立代码

//-----------开始---------------------//
#include <atlbase.h>
#include <Mshtml.h>
#include <winuser.h>
#include <comdef.h>
#include <string.h>
void EnumIE(void);//处理网页
void EnumFrame(IHTMLDocument2 * pIHTMLDocument2);//处理框架
void EnumForm(IHTMLDocument2 * pIHTMLDocument2);//处理表单
CComModule _Module;  //使用CComDispatchDriver ATL的智能指针,此处必须声明
#include <atlcom.h>
void EnumField(CComDispatchDriver spInputElement,CString ComType,CString ComVal,CString ComName);//处理表单域

void EnumIE(void)  
{  
  CComPtr<IShellWindows> spShellWin;  
  HRESULT hr=spShellWin.CoCreateInstance(CLSID_ShellWindows);  
  if (FAILED(hr))  
  {  
  return;  
  }

long nCount=0;    //取得浏览器实例个数(Explorer和IExplorer)  
  spShellWin->get_Count(&nCount);  
  if (0==nCount)  
  {  
    return;  
  }

for(int i=0; i<nCount; i++)  
  {  
    CComPtr<IDispatch> spDispIE;  
    hr=spShellWin->Item(CComVariant((long)i), &spDispIE);  
    if (FAILED(hr)) continue;
 
    CComQIPtr<IWebBrowser2>spBrowser=spDispIE;  
    if (!spBrowser) continue;
 
    CComPtr<IDispatch> spDispDoc;  
    hr=spBrowser->get_Document(&spDispDoc);  
    if (FAILED(hr)) continue;
 
    CComQIPtr<IHTMLDocument2>spDocument2 =spDispDoc;  
    if (!spDocument2) continue;

//Modify by jncao 2007-09-17
 //*******************************************************************************
 CString cIEUrl_Filter;  //设置的URL(必须是此URL的网站才有效);
    cIEUrl_Filter="http://127.0.0.1/SmtCCS_manage/"; //设置过滤的网址
    //*******************************************************************************

CComBSTR IEUrl;
 spBrowser->get_LocationURL(&IEUrl);   
 CString cIEUrl_Get;     //从机器上取得的HTTP的完整的URL;
 cIEUrl_Get=IEUrl;
 cIEUrl_Get=cIEUrl_Get.Left(cIEUrl_Filter.GetLength()); //截取前面N位

if (strcmp(cIEUrl_Get,cIEUrl_Filter)==0)
 {
     // 程序运行到此,已经找到了IHTMLDocument2的接口指针      
        EnumForm(spDocument2); //枚举所有的表单        
 }   
   
  }  
}

void EnumFrame(IHTMLDocument2 * pIHTMLDocument2)
{  
 if (!pIHTMLDocument2) return;      
 HRESULT   hr;  
   
 CComPtr<IHTMLFramesCollection2> spFramesCollection2;  
 pIHTMLDocument2->get_frames(&spFramesCollection2); //取得框架frame的集合  
   
 long nFrameCount=0;        //取得子框架个数  
 hr=spFramesCollection2->get_length(&nFrameCount);  
 if (FAILED(hr)|| 0==nFrameCount) return;  
   
 for(long i=0; i<nFrameCount; i++)  
 {  
  CComVariant vDispWin2; //取得子框架的自动化接口  
  hr = spFramesCollection2->item(&CComVariant(i), &vDispWin2);  
  if (FAILED(hr)) continue;      
  CComQIPtr<IHTMLWindow2>spWin2 = vDispWin2.pdispVal;  
  if (!spWin2) continue; //取得子框架的   IHTMLWindow2   接口      
  CComPtr <IHTMLDocument2> spDoc2;  
  spWin2->get_document(&spDoc2); //取得子框架的   IHTMLDocument2   接口
  
  EnumForm(spDoc2);      //递归枚举当前子框架   IHTMLDocument2   上的表单form  
 }  
}

void EnumForm(IHTMLDocument2 * pIHTMLDocument2)  
{  
  if (!pIHTMLDocument2) return;
 
  EnumFrame(pIHTMLDocument2);   //递归枚举当前IHTMLDocument2上的子框架frame

HRESULT hr;
     
  USES_CONVERSION;

CComQIPtr<IHTMLElementCollection> spElementCollection;  
  hr=pIHTMLDocument2->get_forms(&spElementCollection); //取得表单集合  
  if (FAILED(hr))  
  {  
    return;  
  }  
   
  long nFormCount=0;           //取得表单数目  
  hr=spElementCollection->get_length(&nFormCount);  
  if (FAILED(hr))  
  {  
    return;  
  }  
   
  for(long i=0; i<nFormCount; i++)  
  {  
    IDispatch *pDisp = NULL;   //取得第i项表单  
    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; //取得第j项表单域  
      hr=spFormElement->item(CComVariant(j), CComVariant(), &spInputElement);  
      if (FAILED(hr)) continue;

CComVariant vName,vVal,vType;     //取得表单域的名称,数值,类型
      hr=spInputElement.GetPropertyByName(L"name", &vName);  
      if (FAILED(hr)) continue;  
      hr=spInputElement.GetPropertyByName(L"value", &vVal);  
      if(FAILED(hr)) continue;  
      hr=spInputElement.GetPropertyByName(L"type", &vType);  
      if(FAILED(hr)) continue;  
   
      LPCTSTR lpName= vName.bstrVal ? OLE2CT(vName.bstrVal) : _T("NULL"); //未知域名  
      LPCTSTR lpVal=  vVal.bstrVal  ? OLE2CT(vVal.bstrVal)  : _T("NULL"); //空值,未输入  
      LPCTSTR lpType= vType.bstrVal ? OLE2CT(vType.bstrVal) : _T("NULL"); //未知类型 
  
   EnumField(spInputElement,lpType,lpVal,lpName);//传递并处理表单域的类型、值、名
 }//表单域循环结束    
  }//表单循环结束      
}

void EnumField(CComDispatchDriver spInputElement,CString ComType,CString ComVal,CString ComName)
{//处理表单域
 if ((ComType.Find("text")>=0) && strcmp(ComVal,"NULL")==0 && strcmp(ComName,"userName")==0)
   {
     CString Tmp="123456";
     CComVariant vSetStatus(Tmp);
  spInputElement.PutPropertyByName(L"value",&vSetStatus);
   }
   if ((ComType.Find("password")>=0) && strcmp(ComVal,"NULL")==0 && strcmp(ComName,"password")==0)
   {
     CString Tmp="123456";
     CComVariant vSetStatus(Tmp);
  spInputElement.PutPropertyByName(L"value",&vSetStatus);
   }
   if ((ComType.Find("submit")>=0))
   {
  IHTMLElement*  pHElement;
  spInputElement->QueryInterface(IID_IHTMLElement,(void **)&pHElement);
  pHElement->click();               
   }
}
//--------------------结束--------------------------------------//

2.执行:

void CDemoDlg::OnOK()
{
 // TODO: Add extra validation here
  ::CoInitialize(NULL); //初始化COM
     EnumIE();             //枚举浏览器      
     ::CoUninitialize();   //释放COM
 //CDialog::OnOK();
}

vc遍历网页表单并自动填写提交相关推荐

  1. 网页表单回车自动提交问题

    文章目录 1 当前问题 2 问题原因 3 解决问题 3.1 取消text默认提交行为 3.2 取消表单的默认提交行为 3.3 增加隐藏不显示的text 4 问题扩展 1 当前问题 网页中,一个form ...

  2. VC提交网页表单-自动评论留言(1)

    前段时间,仔细看了一个HTTP协议于是就写了这样一个自动评论的测试程序,下面是我本次学习实验的学习笔记: 一.准备工作: 1.本机环境:Windows XP SP3.ADSL 10M光纤 2.开发工具 ...

  3. python自动提交网页表单_python自动提交表单数据库

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  4. 怎样控制键盘按键自动填写网页表单

    浏览器中使用模拟键盘按键填写网页表单,不但可以完成数据输入,输入时还能真实地触发键盘元素绑定的键盘事件. 打开木头浏览器的工具菜单,进入项目管理容器,创建"填写内容"步骤,并打开百 ...

  5. 网页表单文本框的自动填写(四种方法)

    随着应用系统从客户端+服务器模式,逐渐发展成浏览器+服务器模式.越来越多的操作是基于浏览器来完成的,在输入数据时可以方便的使用批量操作工具,提高工作效率. 在使用浏览器自动填写网页表单时,遇到最多的就 ...

  6. 自动将Excel文件中的数据批量填写到网页表单

    把Excel表格内容录入到网页表单,只需要设置表单输入框与Excel字段间的对应关系就可以了.一般按以下几个步骤操作: 1.先打开测试的表单看一下,并在木头浏览器(MutouBrowser)主窗口中, ...

  7. C#技巧:网页表单自动填写技术

    C#技巧:网页表单自动填写技术 var ie=Wscript.createobject("InternetExplorer.Application"); var args = Ws ...

  8. Delphi自动提交网页表单和获取框架网页源码

    这两个问题的实现原理其实是差不多的,所以放在一起介绍,单元MSHtml封装了我们需要的功能. 首先,新建一个DELPHI工程,在USES部分添加MSHtml单元的引用. 然后,在窗体上放置一个TWeb ...

  9. 小说阅读网站设计HTML,40多个漂亮的网页表单设计实例

    网页表单是访问者与网站拥有者主要的沟通途径.返馈总是重要的,这就是我们为什么确保网页表单容易理解和使用起来比较直观的原因,尽管如此,甚至在形式设计中它也担当创意中的有效部分. 网页表单并非都是乏味的, ...

最新文章

  1. 3dsMax插件V-Ray建筑可视化三维渲染细节技术学习教程
  2. Spring + Mybatis 集成原理分析
  3. linux下应用程序性能剖分神器gprofiler-tools-安装和使用
  4. 我看过且非常喜欢的《电影》和书
  5. php调用以太坊geth API说明
  6. 深入了解这些Java框架,看看哪个更适合你?
  7. 访问数组元素进行获取
  8. python local_Python3中 对local和nonlocal 关键字的改善认识(新手向)
  9. create react app创建的项目运行test的时候不能解析webpack的alisa配置的问题
  10. zend studio php 5.5,PHP - 下载 - Zend Studio 5.5
  11. PHP--session
  12. 前端项目,将package.json数据放到项目某处使用
  13. deeplin显示安装空间不够_电视内存不够怎么办?一步到位来搞定
  14. 去哪儿 Api 自动化测试实践
  15. android按钮放图片不显示文字,Android 自定义标签 Imagebutton实现ImageButton里放置文字...
  16. Windows10电脑重置后右键没有nvidia控制面板的问题
  17. .计算机自动关机或重启,电脑自动关机与重启是什么原因
  18. 生成帮助文档(html或chm格式)
  19. h5调用指纹识别_HTML5 + JS 网站追踪技术:帆布指纹识别 Canvas FingerPrinting Universally Unique Identifier,简称UUID...
  20. MD5的标准幻数的不同写法

热门文章

  1. linux 不关机添加硬盘,完美解决Ubuntu Linux关机异响[SATA硬盘]
  2. python处理csv文件缺失值_Python:如何处理CSV中的缺失值?
  3. python 静态方法与类方法
  4. 重新更新了,账号都丢了,重新找回的
  5. postgres外部表
  6. Hadoop 单机版和伪分布式版安装
  7. Java - 对象的创建
  8. mx:button加skin光晕点击时,大小不一样
  9. Oracle服务自动启动脚本
  10. Android : 反射机制获取或设置系统属性(SystemProperties)