麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

用Delphi編寫論壇灌水機

2019-11-18 18:09:58
字體:
來源:轉載
供稿:網友

論壇灌水機的技術點

破天驚 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再加上一些代碼就可以作成一個完整的灌水機了!


上一篇:用delphi批量導入某子目錄下所有JPG圖片文件到數據庫

下一篇:Delphi程序設計規范

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 中国免费黄色 | 99亚洲国产精品 | 欧美激情区 | 午夜视 | 中文字幕在线观看视频一区 | 黄污污网站 | 亚州精品天堂中文字幕 | 98国内自拍在线视频 | 久久久久久久免费看 | 久久久久久久亚洲视频 | 亚洲国产成人久久一区www妖精 | 亚洲精品3 | 日本免费aaa观看 | 天天草天天干天天 | 男女生羞羞视频网站在线观看 | 欧美一级做一级爱a做片性 91在线视频观看 | 久久日本 | 今井夏帆av一区二区 | 最新91在线视频 | av中文在线观看 | 天天夜干| 99久久电影 | 欧美爱爱视频网站 | 久久视频精品 | av电影免费在线看 | 青草伊人网| 热99热 | 九九热视频在线免费观看 | 黄色a级片视频 | 91亚洲精品一区二区福利 | 欧美成人视 | 免费视频a | 婷婷久久综合九色综合色多多蜜臀 | 精品亚洲午夜久久久久91 | 欧美一级片免费在线观看 | 九九久久视频 | 欧美一级毛片大片免费播放 | 成人情欲视频在线看免费 | 久久精品视频亚洲 | 久久一本日日摸夜夜添 | 中文字幕11 |