uses
SHDocVw, MSHTML;
TForm1 = class(TForm) WebBrowser1: TWebBrowser; Button1: TButton; procedure Button1Click(Sender: TObject); procedure WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant);
private { Private declarations } public { Public declarations } end;
2. 버튼 클릭 이벤트에서 예제로 사용할 네이버 로그인 페이지를 불러옵니다.
procedure TForm1.Button1Click(Sender: TObject); begin WebBrowser1.Navigate('https://nid.naver.com/nidlogin.login'); end;
3. WebBrowser의 DocumentComplete이벤트에서 자동입력 부분을 구현합니다.
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant); var doc3 : IHTMLDocument3; eleColl : IHTMLElementCollection; I: Integer; begin
//웹페이지의 로딩완료 이벤트에서 작업을 진행합니다.
doc3 := (pDisp as IWebBrowser2).Document as IHTMLDocument3;
//Element를 찾기위해 Document를 IHTMLDocument3에 맞춰 가져옵니다. -> MSDN 참조
doc3.getElementById('id').setAttribute('value', 'testID', 0 ); doc3.getElementById('pw').setAttribute('value', 'testPw', 0 );
//가져온 Document에서 아이디, 비밀번호 입력창의 위치를 id로 찾아와 값을 넣어줍니다.
eleColl := doc3.getElementsByTagName('input');
//네이버는 로그인 버튼의 id값이 존재하지 않으므로 TagName으로 찾아줍니다.
for I := 0 to eleColl.length - 1 do begin if (eleColl.item(I, 0) as IHTMLInputElement).type_ = 'submit' then (eleColl.item(I, 0) as IHTMLInputElement).form.submit; end;
//Collection에서 로그인 버튼에 해당하는 Element를 찾아와 Submit을 실행시켜줍니다.
end;