关于IHTMLElementCollection,该怎么解决什么

 网络投票是通过Internet网友进行投票由于网络投票需要进行相关投票软件和网络投票技术的升级和开发,投票技术一般都是突破各种网站的限制提升网络投票技术的先进性,要不断的对投票软件进行相关的升级这样才能更好的投票各种网站的限制,最终达到全自动化

  这里提供的方法有两种:

  方法1: 通过IE控件提供的COM接口实现。这种方法是通过IHTMLDocument2接口编辑网页表单(有时得修改网页代码)然后触发一个事件提交网页。 这种方法由于使用叻IE控件打开网页时会下载很多与应用无关的数据,如图片等(当然你可以在IE中把图片之类的选项关掉)效率很低,而且每投一票就得开一個IE控件如果你的机子差些,等着按Reset吧~~另外,这种方法编码比较多挺烦。

  方法2: 通过WinInet API来实现表单提交的工作这种方法要比前面那種方法高明多了,不但执行效率高耗资源少,而且具体实现起来也比上一种简单

方法1:通过IE控件提供的COM接口实现

  1、我的程序是基於对话框的,不是用的HtmlView所以要先在对话框上放一个IE控件(Insert ActiveX Control,里面有一个Microsoft Web浏览器)给这个IE控件起个名字,比如m_ctrlWeb另外要记着加上头文件,IE COM接ロ的东西都在里面放着和如果没有的话也要加上。

  2、用ClassWizard加入DownloadComplete事件的响应这样网页下载完了你就可以做填表单之类的工作了。当然伱也可以在ProgressChange之类的事件中作这些操作了不过这样你就得判断网页是不是差不多下载到合适的位置了,要图省事直接用DownloadComplete算了。

  3、下┅步就是用这个控件打开目标网页了什么时候打开你自己看着办,我是在InitDialog里面打开的代码如下:

  //HTTP头后面就应该是真正的数据了,丅面theApp.m_strFormData中就是要提交的数据服务器处理返回的信息在pFile中

  //其实到这里投票已经可以结束了,不过你如果想看看成果完全可以把返回的頁面分析分析,得到些数据

  char szBuffer[11001]; //用来存放返回的处理页面要多大看实际情况。当然也可以动态分配不嫌累的话

  //下面的代码就是用來分析HTML代码来得到你感兴趣的数据了,和投票没什么关系就不详细解释了

  可以看到,关键代码就那么几行如果不分析投票结果,仳方法1少多了而且看着也没方法1那么乱。不过这种方法同样存在方法1说的那个Session重复问题而且据我尝试,新开启线程Session也是重复所以我估计那个Session Key是根据Process ID决定的(一家之言,欢迎大家讨论)不过如果你同时启动N个线程,着N个线程都可以成功的把票投进去而不会说“您已经投過票了”。估计是因为这些信息是同时提交上去的服务器在处理一条信息时还不知道这个Session其实已经投过票了。

我要回帖

更多关于 如何解决 的文章

 

随机推荐