通行证:用 户 密 码 注册 www.pconline.cn 汽车网 游戏网 时尚女性
  太平洋电脑网
首 页 |
论 坛 |
今日报价 | 产业资讯 | 数码世界 | 硬件资讯 | 软件资讯 | 下载中心 | 游 戏 |
产 品 库 | 渠道商情 | 招聘培训 | 二    手 | 评 测 室 | 导购大全 | 社 区 |
摄影
部落
北京 上海 广州 深圳 香港 广西
重庆 山东 江苏 辽宁 福建 成都
手机 数码相机 随身听 DIY配件 笔记本 台式机 摄像机 精品廊
手 机 数码相机 随身听 DIY配件 笔记本 台式机 摄像机 精品廊
   
   
首页 资讯 网络 系统 开发 认证 课程 考题下载 职场 找工作 找人才 服务指南  
 
认证专区: | Cisco | Microsoft | Sun | Oracle | IT设计 | 考题分析 | 软件水平考试 |
 
您现在的位置: 招聘与培训 > 程序开发 > 其它开发认证 > Borland 免费新闻代码RSS新闻聚合
 
用Delphi实现论坛灌水机(含源码)
作者:破天惊 责任编辑:liyalin

  本来以为网页里的edit,memo等都和程序里的一样,可以用句柄来控制,但后来才明白,它是不存在句柄的!

  查了好久,前几天看到一个关于QQ自动申请的例子.主要就是控制网页各种操作的!总结了一下,做出一个论坛灌水机:

  首先要在uses中引用mshtml单元.

  代码及分析如下:

    var
hform:IHTMLFormelement;
hdoc:ihtmldocument2;
hall:ihtmlelementcollection;
Hinput:IHTMLinputelement;
iw:iwebbrowser2;
hlen,tmploop:integer;
vk:oleVariant;
dispatch:IDispatch;
begin
if Assigned(webbrowse1) then ///保证网页里有内容;即已经打开一个网页!
begin
hdoc:=webbrowse1.document as ihtmldocument2;
hall:=hdoc.get_all;
hlen:=hall.get_length;
////以上几步的操作为:将浏览器控件里的内容赋给hdoc.取其所有标识,并算出总数;
////下面的操作为:按总数循环找到用户名和密码的edit;并赋值;
for tmploop:=0 to hlen-1 do
begin
vk:=tmploop;
dispatch:=hall.item(vk,0);
if succeeded(Dispatch.QueryInterface(IHTMLInputelement,hinput)) then
///如果此标识是一个edit控件.....
begin ////下面这里的uppercase是必需的!防止因大小写的不同而判断失误!
///下面的"TEXT"是由网页里的内容来确定的.也就是说你要判断就必需根据具体网页代码来!
///密码框和用户名处是一样的!
if uppercase(hinput.Type_)='TEXT' then hinput.value:='tresss'
else if uppercase(hinput.type_)='PASSWORD' then hinput.value:='tresss';
end;
if succeeded(dispatch.QueryInterface(IHTMLFormElement,hform))
and (uppercase(hform.name)='THEFORM')
then
///此处是form提交.如果从html发现只有一个form的话那第二个条件是非必需的!
///而且也不一定要判断name属性,也可以根据其它属性来判断.
Hform.submit;
end; ////for end;
end; //if end;
end;

  到此,,一个自动登陆的例子就作好了..如果要实现灌水的话,,可以将hinput:ihtmlinputelement换成htext:ihtmltextareaelement,也就相当于memo控件.将用户名的赋值换成是发言的赋值就好;当然这里还可以换成是其它的,如单选等...具体内容可以查看mshtml里的列表!

  本来到这里已经够了.但是后来发现--原来论坛里是有框架--frame的.好长一段时间被此困扰着,后来在csdn上问了一下,有人给出了解决方法,试了一下很不错!

  上面的代码里可以加入:
    var
......
......
iw:iwebbrowser2;
begin
.....
iw:=getframe(3); //此步即是取得webbrowse里的第二个框架;
///而后的操作都是一样的,也就是上面的操作的作用是将一个框架里的内容来作为一个网页来处理;
hdoc:=iw.document as ihtmldocument2;
hall:=hdoc.get_all;
......
......
///getframe() 函数如下需要在uses里加入activex单元:
Function TFrmain.GetFrame(FrameNo:Integer):IWebbrowser2;
var
OleContainer:IOleContainer;
enum:IEnumUnknown;
unk:IUnknown;
Fetched:PLongint;
begin
while webbrowse1.ReadyState<>READYSTATE_COMPLETE do
Application.ProcessMessages;
if Assigned(webbrowse.document) then
begin
Fetched:=nil;
OleContainer:=webbrowse.Document as IOleContainer;
OleContainer.EnumObjects(OLECONTF_EMBEDDINGS,enum);
Enum.Skip(FrameNo);
Enum.Next(OLECONTF_EMBEDDINGS,Unk,Fetched);
Result:=Unk as IWebbrowser2;
end
else
Result:=nil;
end;

  还有要说明的一点就是网页里框架的跳转!依然是使用的navigate 但是需要两个参数!
  webbrowse.navigae('要转到的网页地址',flag1,flag2);
  其中两个参数的类型是:olevariant;
  第一个参数不需要赋值,它控制的是网页打开的其它选项(如:在新网页中打开.等).
  我们所要操作的是第二个参数.这里你要先打开网页的源文件,查看他的frame的name属性!记住所要控制的frame的name把它的值赋给flag2就可以了!这样就是在一个frame中打开一个网页!

  这样的话,加上一个timer再加上一些代码就可以作成一个完整的灌水机了!

察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:


更多相关搜索: Delphi.. 开发.. 程序.. 设计..

 
本栏今日更新
相关文章
 
·C++文档:如何实现十亿分之一秒的时钟精度
·读书笔记一则:程序员的个人性格
·C#实现的俄罗斯方块程序(附源码)
·Java游戏起步:(一)线程与线程池
·初手指南:什么是 Microsoft .NET?
·心得笔记:JSP 的学习经验总结
·软考指南:程序员数据结构笔记
·软考:最近三年高程试题知识点比较
·果然是真的!尼康数码单反D200真机及镜头曝光图
·送给天蝎座的情人礼物!近期个性DC选购趣谈
·普及化的背后:论DV平民化的“傻瓜”之路
·国产软件显威力!实战数码相机CCD坏点屏蔽修复!
·又一国货精品 POYA新品MP3 S120详评
·实用新突破!可爱精灵富士Z2详细测试报告
·让画面动感十足 用DV拍摄鲜花绽放过程
·镜王将逝?佳能24-105mm F4镜头面临缺陷质疑

  发给好友 我要报错 投稿给我们 加入收藏 返回顶部  
 
新闻搜索
高级搜索
本栏今日焦点
-
栏目热点推荐
招聘与培训
很多上班族都有的毛病,看看你占了几条?

招聘与培训
BBC记者眼中的上海-一个充满对比的城市

招聘与培训
求职最受欢迎的十大技能(趣味组图)

招聘与培训
05届毕业生就业率:大专生:本科生=40:70

关于太平洋 | 网站地图 | 广告指南 | 联系我们 | 招聘精英 | 合作联系


广东省通信管理局
粤ICP证号:000010
技术支持与报障:support@pconline.com.cn
        020-87568837
        
对本站有任何建议、意见或投诉,请点这里在线提交.
本网站简体、繁体两种版本,以简体版为准
PConline版权所有,未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任__