정말 성실히 답변에 주셔서 감사합니다.
너무나 큰 도움이 되었습니다.
그런데 제가 정확히 알려고 하는것은
id의 입력버턴에 마우스(SetCursorPos(500,600))로 위치하여 edit1.text값을 id에 대입하는것입니다.
그런데 그 id값(vaDocument.Forms.Item(itCount).Item(itItemCount).Name)이 login으로 변수가 정해진것은 아닙니다.
또 그 입력버턴이 1개 2개 정해진것이 아닙니다.
만일 입력버턴에 테스트의 값을 대입시키는 방법만 알고 싶은것입니다.
그리고 입력버턴이 정해진것이 아니기 때문에 위치(x,y)를 화일처리 할려고 합니다.
너무나 제가 저의 노력은 안하고 제 입장만 말하는것 같아 죄송합니다. 그런데 이쪽은 전혀 가닥이 잡히지 안습니다.
또 웹브라우저에 대하여 노력하겠습니다.
그리고 저는 델6를 사용하고 있습니다.
갑사합니다.
////////////////////////////////////////////////////////////////////////////////////////////////////
유영인 Cuperido 님이 쓰신 글 :
: 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를 클릭할려고 합니다.
: : : : 그런데 그 방법좀 부탁합니다.
: : : : 감사합니다.
: : : :
: : : :