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
[15343] Re:HTML파싱 질문입니다.
오랑캐꽃 [oranke] 2837 읽음    2014-12-03 13:53
하두고 님이 쓰신 글 :

: 타회사 홈페이지를 파싱하여 테이블의 데이터를 가져오려 하는데요.

:

: idHTTP를 사용하여 해더를 보내주고

: 응답을 받아서 확인해 보면 테그에는 아무것도 없습니다.
:
: JAVAScript에서 document.write를 이용하여 페이지를 보여주기 때문인데요.
:
: 이런경우 어떻게 데이터를 읽어와야 할까요?
:
: 이것 때문에 당장은 WEBBrowser오브젝트를 사용하는데 속도도 상당히 느리고
: 특히 로그인 할때
안에 회원아이디와 암호 테그에 id나 name속성이 없어서
: 객체 번호를 이용해서 가져와야 하는데
: 이것도 document.write에서 뿌려주기 때문에 객체번호가 자꾸 바뀌구요.
:
: idHTTP에서 받아온 문자열의 자바스크립트를 어떻게 실행해서 페이지를 분석해야 하나요?

답변에 앞서 미리 말씀드릴 것은... 저도 안써봤다는 것.
몇년 전 양병규형님께 스쳐가듯 들은 풍월이 전부입니다.

윈도에는 Microsoft Script Control 이라는 COM 객체가 들어있습니다.
자바스크립트나 비베스크립트를 굴려주는 물건이지요.

http://support.microsoft.com/kb/184740/ko

델파이 7을 기준으로, Project -> Import Type Library 로 가져와 쓸 수 있습니다.



생성된 MSScriptControl_TLB.pas 유니트를 컴포넌트로 등록하면 TScriptControl 이 팔레트에 생성되지요.


폼 위에 버튼이랑 메모, 그리고 TScriptControl 을 올린 뒤,
저 위에 링크한 내용을 기준으로 비베스크립트 호출예제를 델파이로 바꿔보았습니다.
GlobalModule 얻는부분은 잘 몰라서, 그리고 점심시간이 끝나가므로 패스.


procedure TForm1.Button1Click(Sender: TObject);
var
  va_Param: Variant;
  psa_Param: ActiveX.PSafeArray;
begin
  with ScriptControl1 do
  begin
    // Set script language (VBScript is the default).
    Language := 'VBScript';
    // Set UI interaction (TRUE is the default).
    AllowUI := true;
    // Copy the script to the control.
    AddCode(Memo1.Text);
    // Demonstrate the Eval method.
    WriteLn(Eval('AddTwo(5,7)'));
    // Demonstrate the Run method both with and without return values.

    // Hello("Jane Dow") 호출 테스트.
    va_Param := VarArrayCreate([0,0], varVariant);
    va_Param[0] := 'Jane Doe';
    psa_Param := PSafeArray(TVarData(va_Param).VArray);
    Run('Hello', psa_Param);

    // AddTwo(4,6) 호출 테스트.
    va_Param := VarArrayCreate([0,1], varVariant);
    va_Param[0] := 4;
    va_Param[1] := 6;
    psa_Param := PSafeArray(TVarData(va_Param).VArray);
    WriteLn(Run('AddTwo', psa_Param)); // Run의 리턴값이 Variant임.

    // Demonstrate the ExecuteStatement method.
    ExecuteStatement('Hello "Sue Smith"');
    ExecuteStatement('AddTwo 9,18');
    ExecuteStatement('MsgBox CStr(AddTwo(3,8))');
  end;
end;



좀 더 여유가 있으시면... 겁나 빠르다고 소문난 크롬의 V8엔진을 써보시는것도... ^^;;

+ -

관련 글 리스트
15342 HTML파싱 질문입니다. 하두고 1945 2014/12/01
15343     Re:HTML파싱 질문입니다. 오랑캐꽃 2837 2014/12/03
15344         Re:Re:HTML파싱 질문입니다. 첫눈 2326 2014/12/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.