Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[9755] Re:Re:Re:[질문]유영인님 한번 더 부탁합니다.
유영인 Cuperido [cuperido] 1297 읽음    2004-07-18 03:31
login.zip 189.5KB HTTP Login 예제
3번 방법을 이용하여 한 방법이 보다 정확해서 그렇게 예제를 꾸미다가
보통은 이렇게 하고 Submit 이벤트를 호출하면 되는데,
Yahoo는 조금 특별해서 자동 로그인 검사까지 하는군요.
(마우스로 클릭을 하였을때 특정 변수를 올려서 로그인 폼을 직접 찍었는지 검사합니다)

그래서, 아이디와 패스워드는 소스 파일을 이용해서 갈아치우는 방법
로그인 버튼은 직접 눌러주는 방법으로 예제를 만들었습니다.
(전체 소스와 실행을 해보시려면 첨부파일을 참조하세요)

계속 연구해서 Submit 을 호출하는 방법으로 깔끔히 처리해 보시는 것도... :)


cuperido


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, OleCtrls, SHDocVw;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    WebBrowser1: TWebBrowser;
    procedure Button1Click(Sender: TObject);
    procedure WebBrowser1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin

WebBrowser1.Navigate('http://kr.yahoo.com/');

end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
var
stSource, stURL : string;
vaDocument : OleVariant;
itCount, itItemCount : Integer;
blHaveToLogin : boolean;
begin

// Home에서만 처리하도록 함
stURL := URL;
if stURL <> 'http://kr.yahoo.com/' then exit;

if VarIsEmpty(WebBrowser1.Document) or VarIsNull(WebBrowser1.Document) then exit;
vaDocument := WebBrowser1.Document;

blHaveToLogin := false;

for itCount := 0 to vaDocument.Forms.Length - 1 do
begin
   for itItemCount := 0 to vaDocument.Forms.Item(itCount).Length - 1 do
   begin
     if vaDocument.Forms.Item(itCount).Item(itItemCount).Name = 'login' then
     begin
       vaDocument.Forms.Item(itCount).Item(itItemCount).Value := Edit1.Text;
       blHaveToLogin := true;
     end;

     if vaDocument.Forms.Item(itCount).Item(itItemCount).Name = 'passwd' then
     begin
       vaDocument.Forms.Item(itCount).Item(itItemCount).Value := Edit2.Text;
       blHaveToLogin := true;
     end;
   end;
end;

if blHaveToLogin then
begin
   SetCursorPos(Form1.Left + 670, Form1.Top + 230);
   mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
   mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
end;

end;

end.


이동안 님이 쓰신 글 :
: 답변 감사합니다.
: 그럼 제가 올린소스는 왜 안된느지 또는 어떤 방법으로 해야 되는지 좀 부탁합니다.
: 마우스로까지는 id와 passsword에 포커스를 이동하는것까지는 하였습니다,
: 또 마우스 다운 업 또는 리턴까지도 가능합니다.
: 그런데 클릭보드(Edit1.Text)에 들어있는 값을 id포커스에 자동으로 보내고 하는 작업은 아직 헤메고 있습니다.
: 또 밑에 소스를 보시고 작성하는 순서가 올바른지 아니면 방법을 좀 부탁합니다.
: 하여튼 감사합니다.
:
: //////////////////////////////////
:
: 유영인  Cuperido 님이 쓰신 글 :
: : 자동 로그인을 구현하기 위해서는 몇가지 정도의 방법이 있습니다.
: :
: : 1. 시뮬레이션
: : 이동안님께서 하신 방법처럼 하시는 방법인데, 이 방법은 다른 사람들에게 배포시에는
: : 상당한 여러움이 발생할 수 있습니다. 객체의 위치가 OS마다 IE 버젼, IE를 크기를
: : 어디에 맞추었는지에 따라 다르기 때문 인데요, 물론 자신만 사용할 것이면 상관이
: : 없겠지만, 그렇지 않은 경우에는 당연히 엉뚱한 곳을 찍는 문제가 발견됩니다.
: : 하지만 매우 쉽게 구현할 수 있겠지요.
: :
: : 2. 쿠키 생성
: : IE를 이용하지 않는 객체라면, 쿠키값을 만들어줌으로써 자동 로그인을 구현할 수 있습니다.
: : 당연히, IE에서만 지원되는 것은 처리되지 않지만, 자동 게시물 쓰기 라든지의 프로그램등에서
: : 볼 수 있는 기능들처럼, IE 기능이 필요한 없는 곳에서는 사용이 편리하고 꽤 정확합니다.
: :
: : 3. IE 객체 생성
: : WebBrowser 컴포넌트로 생성된 IE에서 이벤트를 이용함으로 보다 정확하게 접근할 수 있겠습니다.
: : 결과적으로는 아래의 COM 방식과 동일하겠지만, 프로그래머 입장으로서는 이미 맵핑되어 있는
: : 이벤트를 만질 수 있어 보다 조금 정확하게 구현할 수 있습니다. 이러한 방법으로는 홈페이지가
: : 모드 로드되었을때를 기준으로 해서 소스를 바꿔치기 해버리는 방법으로 구현합니다.
: :
: : 4. IE COM 연결
: : COM 객체로 연결하여 인터페이스를 생성하고 원하는 객체를 바꾸는 방법입니다. 이 방법의 장점은
: : 굳이 내포시키지 않더라도, 사용자가 따로 띄운 IE에서도 동작을 할 수 있게끔 할 수 있다는
: : 것이고요. 자동 로그인 프로그램들이 이러한 방식을 사용하고 있습니다. 물론, 이 방법이 가장
: : 까다롭고, 로그인 정도면 무난하겠지만, 더 깊은 부분의 경우에는 책 한권을 봐야할 정도의 많은
: : 레퍼런스가 필요합니다.
: :
: :
: : 1번 방법을 답변해 드리려고 하니, 제 PC에 맞춰서 설명을 드리자면 실행을 하실때 실행이 안되는
: : 경우가 발생할것 같아서, 여러 방법을 다시 말씀드렸습니다. 원하시는 스펙에 따른 방법을 선택해
: : 주시면 그 해당하는 방법을 답변해 드리겠습니다. :)
: :
: :
: : cuperido
: :
: :
: :
: : 이동안 님이 쓰신 글 :
: : : 안녕하세요
: : : 좀처럼 처음 해보는 일입니다. 도움좀 부탁합니다.
: : : //////////////////////////////////////////////////////////////////
: : :      //
: : :      IE := CreateOLEObject('InternetExplorer.Application');
: : :      IE.Visible     := True;
: : :      IE.ToolBar     := False;
: : :      IE.Resizable   := False;
: : :      //.TheaterMode := True ;
: : :      IE.Left        := 0    ;
: : :      IE.Top         := 0    ;
: : :      IE.Width       := 800  ;
: : :      IE.Height      := 700  ;
: : :      IE.Navigate(URL);
: : :      //
: : :      Setcursorpos(400,130);        // 커서를 x,y 좌표이용하여 id에 위치 시킵니다.
: : :      Edit1.text := 'winsoft';      // id
: : :      Edit1.setfocus;
: : :      Edit1.copyToClipboard;
: : :      //
: : :      Edit2.text := 'winsoft';      // password
: : :      Edit2.setfocus;
: : :      Edit3.copyToClipboard;
: : :
: : : 위에 테스트문자값을 야후의 id와 password에 입력후 자동으로  Login를 클릭할려고 합니다.
: : : 그런데 그 방법좀 부탁합니다.
: : : 감사합니다.
: : : 
: : :

+ -

관련 글 리스트
9750 [질문]야후 싸이트에서 Edit1,Edit2값을 id,password를 보내기 입니다.......부탁합니다. 이동안 1164 2004/07/17
9752     Re:[질문]야후 싸이트에서 Edit1,Edit2값을 id,password를 보내기 입니다.......부탁합니다. 유영인 Cuperido 1393 2004/07/17
9753         Re:Re:[질문]유영인님 한번 더 부탁합니다. 이동안 1088 2004/07/18
9755             Re:Re:Re:[질문]유영인님 한번 더 부탁합니다. 유영인 Cuperido 1297 2004/07/18
9757                 Re:Re:Re:Re:[질문]유영인님 한번 더 부탁합니다. 이동안 1128 2004/07/18
9760                     Re:Re:Re:Re:Re:[질문]유영인님 한번 더 부탁합니다. 유영인 Cuperido 1476 2004/07/18
9764                         Re:Re:Re:Re:Re:Re:[질문]유영인님 한번 더 부탁합니다. 이동안 1295 2004/07/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.