网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Delphi
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.如何访问一个进程的内存空间.
.选择一个网路邻居.
.由数据库数据生成XML的方法(有源.
.用Delphi实现BP机、手机短讯.
.生成BIG5字符集所有字符.
.在Delphi中调用CHM帮助文件.
.Linux的开发利器,Kylix.
.一个四舍五入的函数.
.拖拉打开文件.
.把数据集保存为Excel格式的一个实.
.Delphi中的图形显示技巧.
.远程控制篇:服务端程序的隐藏.
.泛型编程在非C++语言中的实现之探.
.搜索字符串在流中的位置.
.剖析TThread类.
.Delphi開發國際化應用程序.
.delphi+Oracle做的三层结构的干部.
.url编码与解码工具附代码.
.编程实现网页表单数据的自动提交.
.VCL中消息处理初探.

用Delphi编写论坛灌水机

发表日期:2006-2-4


论坛灌水机的技术点

破天惊 10.06.2004

 

本来以为网页里的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再加上一些代码就可以作成一个完整的灌水机了!

上一篇:PB开发规范.doc 人气:5016
下一篇:给DBGrid添加鼠标滚动事件 人气:4809
浏览全部Delphi的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐