* 폼에 TWebBrowser 가 하나 박혀 있고, 그 이름은 WebBrowser1 이라고 가정함.
HTML 페이지의 Form Element 전부 뒤지기
procedure TForm1.Button3Click(Sender: TObject);
const
URL = 'http://www.daum.net';
const
URL = 'http://www.daum.net';
var
Document: IHTMLDocument2;
Form: IHTMLFormElement;
ovElements: OleVariant;
i, j: Integer;
Document: IHTMLDocument2;
Form: IHTMLFormElement;
ovElements: OleVariant;
i, j: Integer;
// 디버깅용 내부함수. 실제로 사용할 땐 외부에서 정의하고 사용하지만 여기서만...
procedure D(s: String);
begin
OutputDebugString(PChar(s));
end;
begin
OutputDebugString(PChar(s));
end;
// ___________________________________________________________
begin
// 웹페이지 로딩
WebBrowser1.Navigate(URL);
while WebBrowser1.readyState<>READYSTATE_COMPLETE do Application.ProcessMessages;
while WebBrowser1.readyState<>READYSTATE_COMPLETE do Application.ProcessMessages;
Document:=WebBrowser1.Document as IHTMLDocument2;
if Document<>nil then begin
// Document.Forms 모두 뒤지기
for i:=0 to Document.forms.Length-1 do begin
// 각 Form 의 Element 모두 뒤지기
Form:=IDispatch(Document.Forms.Item(i, 0)) as IHTMLFormElement;
ovElements:=Form.elements;
for j:=0 to ovElements.Length-1 do begin
try
// Form.name & Element name, type, value 출력
D(Form.name+' -> '+ovElements.item(j).Name+' ['+ovElements.item(j).type+'] = '+ovElements.item(j).value);
except on E:Exception do
D('[Error] '+E.Message);
end;
end; // for j
end; // for i
end
else D('Document=nil');
end;
응용편 - 피파온라인2 로그인하기 (피망)
ID, 비번 입력은 OleVariant 를 이용했고,
로그인 버튼 클릭, 로그인 확인은 IHTMLDocument2, IHTMLElementCollection, IHTMLElement 를 이용.
주의: 화면 상에 TWebBrowser 가 그려지고 있어야 함. ID 넣는 부분이 화면 밖으로 나가 있을 경우 로직은 통하지 않음.
procedure TForm1.Button4Click(Sender: TObject);
const
URL = 'http://fifaonline.pmang.com';
ID = '사용ID';
PW = '사용비번';
INPUT_NAME_ID = 'usrid';
INPUT_NAME_PW = 'passwd';
const
URL = 'http://fifaonline.pmang.com';
ID = '사용ID';
PW = '사용비번';
INPUT_NAME_ID = 'usrid';
INPUT_NAME_PW = 'passwd';
var
Document: IHTMLDocument2;
elementcol: IHTMLElementCollection;
element: IHTMLElement;
Input: OleVariant;
i: Integer;
LoginComplete: Boolean;
Document: IHTMLDocument2;
elementcol: IHTMLElementCollection;
element: IHTMLElement;
Input: OleVariant;
i: Integer;
LoginComplete: Boolean;
begin
// 웹페이지 로딩
WebBrowser1.Navigate(URL);
while WebBrowser1.readyState<>READYSTATE_COMPLETE do Application.ProcessMessages;
WebBrowser1.Navigate(URL);
while WebBrowser1.readyState<>READYSTATE_COMPLETE do Application.ProcessMessages;
// ID, 비밀번호 입력
Input:=WebBrowser1.OleObject.Document.Body.getElementsByTagName('input');
for i:=0 to Input.Length-1 do begin
// ID
if (Input.Item(i).NAME=INPUT_NAME_ID) then Input.Item(i).value:=ID;
// 비밀번호
if (Input.Item(i).NAME=INPUT_NAME_PW) then Input.Item(i).value:=PW;
end;
Input:=WebBrowser1.OleObject.Document.Body.getElementsByTagName('input');
for i:=0 to Input.Length-1 do begin
// ID
if (Input.Item(i).NAME=INPUT_NAME_ID) then Input.Item(i).value:=ID;
// 비밀번호
if (Input.Item(i).NAME=INPUT_NAME_PW) then Input.Item(i).value:=PW;
end;
// 로그인 버튼 클릭
Document:=WebBrowser1.Document as IHTMLDocument2;
Document.all.tags('input').QueryInterface(IHTMLElementCollection, elementcol);
for i:=0 to elementcol.length-1 do begin
element:=elementcol.item(i, 0) as IHTMLElement;
if System.Pos('btn_login', element.outerHTML)>0 then element.click;
end;
Document:=WebBrowser1.Document as IHTMLDocument2;
Document.all.tags('input').QueryInterface(IHTMLElementCollection, elementcol);
for i:=0 to elementcol.length-1 do begin
element:=elementcol.item(i, 0) as IHTMLElement;
if System.Pos('btn_login', element.outerHTML)>0 then element.click;
end;
// 로그인 완료될 때까지 대기 - 로그아웃 버튼이 있으면 로그인 완료 판단
LoginComplete:=False;
while not LoginComplete do begin
Document.all.tags('img').QueryInterface(IHTMLElementCollection, elementcol);
for i:=0 to elementcol.length-1 do begin
element:=elementcol.item(i, 0) as IHTMLElement;
if Pos('btn_logout', element.outerHTML)>0 then begin
LoginComplete:=True;
break;
end; // if
end; // for
LoginComplete:=False;
while not LoginComplete do begin
Document.all.tags('img').QueryInterface(IHTMLElementCollection, elementcol);
for i:=0 to elementcol.length-1 do begin
element:=elementcol.item(i, 0) as IHTMLElement;
if Pos('btn_logout', element.outerHTML)>0 then begin
LoginComplete:=True;
break;
end; // if
end; // for
Sleep(500);
Application.ProcessMessages;
end; // while
Application.ProcessMessages;
end; // while
end;
'Delphi' 카테고리의 다른 글
[Delphi] 프로세스가 살아있는지 검사, 프로세스 죽이기 (0) | 2009.04.18 |
---|---|
[Delphi] TPopupMenu 에 관하여 (0) | 2009.04.18 |
[Delphi] 바이너리 파일을 텍스트로 읽어들이기 (0) | 2009.04.18 |
[Delphi] TForm.Components[i] 사용 시 주의점 (0) | 2009.04.18 |
[Delphi] 웹페이지에서 텍스트 긁어와서 뒤지기 (0) | 2009.04.18 |