최근에 웹 페이지 제출물을 시뮬레이션하고 웹 페이지로 돌아가서 웹 페이지에서 해당 요소를 얻습니다 검색하면 HTMLPARSER 클래스의 여러 Delphi 버전을 찾았지만 몇 가지 라이브러리를 사용하려고했지만 구문 분석이 불완전한 것으로 나타났습니다. 인터페이스에 브라우저가 있으면 웹 브라우저의 문서 인터페이스를 통해 웹 페이지 요소를 작동 할 수 있다고 생각했습니다. 그러나 웹 페이지 제출을 시뮬레이션하면 WebBrowser가 반드시 WebBrowser를 사용하지 않고 HTML을 직접 구문 분석해야합니다 내부의 객체는 구문 분석 한 후 HTML을 실현하고 MSDN을 검색 한 다음 Google IT를 실현 한 후 작동하며 건축 방법은 다음과 같습니다.
// ihtmldocument2 인터페이스를 만듭니다
CocreateInstance (class_htmldocument, nil, clsctx_inproc_server, iid_ihtmldocument2, fhtmldoc);
인터페이스가 만들어지면 문서 요소를 구문 분석 할 수 있으며 이는 매우 상쾌합니다!
고유 한 작업을 결합하여 Combobox, 테이블, 프레임 등과 같은 일부 웹 페이지 요소를 캡슐화하고 HTMLPARSER를 구현했습니다.
여기에 선언이 나와 있습니다. 결국 코드를 다운로드하십시오.
암호
(************************************************* *****)
(*Dexian Studio*)
(*웹 페이지 요소 작동 클래스 라이브러리*)
(**)
(*DXHTMLELEMENT UNIT*)
(*저작권 (C) 2008-2010 유휴 상태 없음*)
(*이메일 : [email protected] : 75492895*)
(************************************************* *****)
단위 DXHTMLELEMENT;
인터페이스
Windows, Sysutils, Clipbrd, Mshtml, ActiveX, Olectrls, Graphics, TypInfo를 사용합니다.
{get element type}
기능 isselectelement (eleelement : ihtmlelement) : 부울;
함수 ISPWDELEMENT (ELEEMENT : IHTMLELEMENT) : 부울;
함수 istextElement (요소 : ihtmlelement) : 부울;
기능 istableElement (요소 : ihtmlelement) : 부울;
함수 islementCollection (요소 : ihtmlelement) : 부울;
기능 ISCHKELEMENT (요소 : ihtmlElement) : 부울;
함수 ISRADIOBTELLEMENT (요소 : IHTMLELEMENT) : 부울;
함수 ismemoelement (요소 : ihtmlelement) : 부울;
함수 isformelement (요소 : ihtmlelement) : 부울;
함수 isimgelement (요소 : ihtmlelement) : 부울;
함수 ISINIMGELEMENT (요소 : IHTMLELEMENT) : 부울;
함수 ISLABELELEMENT (요소 : IHTMLELEMENT) : 부울;
함수 IslinkElement (요소 : ihtmlelement) : 부울;
기능 ISLISTELENTE (요소 : IHTMLELEMENT) : 부울;
함수 iscontrollement (요소 : ihtmlelement) : 부울;
함수 ISOBJECTELEMENT (요소 : IHTMLELEMENT) : 부울;
함수 isframeElement (요소 : ihtmlElement) : 부울;
함수 ISINPUTBTNELEMENT (요소 : IHTMLELEMENT) : 부울;
함수 ISINHIDDENELEMENT (요소 : IHTMLELEMENT) : 부울;
함수 issubmiteLement (요소 : ihtmlelement) : 부울;
{IMGELEMENT 데이터}
함수 getPicIndex (doc : ihtmldocument2; src : string; alt : String) : 정수;
함수 getPiceLement (doc : ihtmldocument2; imgname : string; src : string; alt : string) : ihtmlimgelement;
함수 getRegcodePic (doc : ihtmldocument2; imgname : strc : string; alt : string);
함수 getRegcodePic (doc : ihtmldocument2; index : Integer) : tpicture;
함수 getRegcodePic (doc : ihtmldocument2; element : ihtmlimgelement) : tpicture; 오버로드;
유형
tobjectfromlresult = function (lresult : lresult; const iid; wparam : wparam; out pobject) : hresult;
TelementType = (ele_unkNow, ele_text, ele_pwd, ele_select, ele_checkbox, ele_radiobtn, ele_memo, ele_form, ele_image,
ELE_LABEL, ELE_LINK, ELE_LIST, ELE_CONTROL, ELE_OBJECT, ELE_FRAME, ELE_INPUTBTN, ELE_INIMAGE, ELE_INHIDDEN);
함수 getElementType (요소 : ihtmlElement) : telementType;
함수 getElementTypename (요소 : ihtmlElement) : 문자열;
기능 gethtmltablecell (atable : ihtmltable; arow, acol : integer) : ihtmlelement;
함수 gethtmltable (adoc : ihtmldocument2; aindex : integer) : ihtmltable;
함수 getWebBrowserHtMlTableCellText (doc : ihtmldocument2;
Const TableIndex, Rowindex, Colindex : Integer; var Resvalue : String) : 부울;
기능 gethtmltablerowhtml (atable : ihtmltable; arow : integer) : ihtmlelement;
함수 getWebBrowserhtmltablecellhtml (doc : ihtmldocument2;
Const TableIndex, Rowindex, Colindex : Integer; var Resvalue : String) : 부울;
기능 gehtmltablehtml (atable : ihtmltable; arow : integer) : ihtmlelement;
함수 getWebBrowserHtMltableHtml (doc : ihtmldocument2;
Const TableIndex, RowIndex : 정수; var Resvalue : String) : 부울;
유형
tdxwebframecollection = class;
tdxwebelementCollection = 클래스;
tloadstate = (doc_loading, doc_completed, doc_invalidate);
tdxwebframe = 클래스
사적인
fframe : ihtmlwindow2;
FelementCollection : TDXWebelementCollection;
fwebframecollection : tdxwebframecollection;
함수 getsrc : 문자열;
함수 getElementCount : 정수;
함수 getWebFrameCollection : tdxwebframecollection;
함수 getElementCollection : tdxWebElementCollection;
함수 getDocument : ihtmldocument2;
함수 getReadState : tloadState;
기능 getisloaded : 부울;
절차 setFrame (const 값 : ihtmlwindow2);
함수 getName : String;
공공의
생성자 생성 (iframe : ihtmlwindow2);
파괴자 파괴; 재정의;
속성 프레임 : ihtmlwindow2 읽기 fframe 쓰기 세트 프레임;
속성 SRC : 문자열 읽기 GetSrc;
속성 문서 : ihtmldocument2 getDocument 읽기;
속성 이름 : 문자열 읽기 getName;
속성 프레임 : tdxwebframecollection getwebframecollections;
Property ElementCount : 정수 읽기 getElementCount;
Property ElementCollections : tdxWebElementCollection getElementCollections;
Property ReadyState : troadstate read getReadState;
부동산은로드 됨 : 부울 읽기 getisloaded;
끝;
tdxwebframecollection = 클래스
사적인
fframecollection : ihtmlframescollection2;
프레임 : tdxwebframe;
기능 getCount : 정수;
함수 getFrameInterfaceByIndex (Index : Integer) : ihtmlwindow2;
함수 getFrameInterfaceByName (이름 : String) : ihtmlwindow2;
함수 getFrameByIndex (Index : Integer) : tdxwebframe;
함수 getFrameByName (이름 : String) : tdxWebFrame;
절차 setFrameCollection (const 값 : ihtmlframescollection2);
공공의
생성자 생성 (acollection : ihtmlframescollection2);
파괴자 파괴; 재정의;
속성 framecollection : ihtmlframescollection2 읽기 fframecollection write setframecollection;
속성 수 : 정수 읽기 GetCount;
속성 FrameInterfaceByIndex [index : Integer] : ihtmlwindow2 getFrameInterfaceByIndex;
속성 frameInterfaceByName [이름 : String] : ihtmlwindow2 getFrameInterfaceByName;
Property FrameByIndex [index : Integer] : tdxwebframe read getframebyindex;
속성 framebyName [이름 : String] : tdxWebFrame read getFrameByName;
끝;
tdxwebelementCollection = 클래스
사적인
fcollection : ihtmlelementCollection;
fchildCollection : tdxwebelementCollection;
함수 getCollection (index : String) : tdxwebelementCollection;
기능 getCount : 정수;
함수 getElement (ItemName : String; index : Integer) : ihtmlElement;
함수 getElementByName (ItemName : String) : ihtmlElement;
함수 getElementByIndex (색인 : 정수) : ihtmlElement;
절차 setCollection (const 값 : ihtmlelementCollection);
공공의
생성자 생성 (acollection : ihtmlelementCollection);
파괴자 파괴; 재정의;
속성 수집 : ihtmlelementCollection 읽기 fcollection write setCollection;
속성 childelementCollection [index : String] : tdxWebElementCollection getCollection 읽기;
Property ElementCount : 정수 읽기 GetCount;
속성 요소 [ItemName : String; index : Integer] : ihtmlelement read getElement;
속성 elementByName [itemName : String] : ihtmlElement read getElementByName;
Property ElementByIndex [index : Integer] : ihtmlelement read getElementByIndex;
끝;
tlinkcollection = class (tdxwebelementCollection)
끝;
tdxwebtable = 클래스;
tdxtableCollection = 클래스
사적인
ftablecollection : ihtmlelementCollection;
fdocument : ihtmldocument2;
fwebtable : tdxwebtable;
함수 getTableInterfaceByName (aname : String) : ihtmltable;
절차 setDocument (값 : ihtmldocument2);
함수 getTableInterfaceByIndex (Index : Integer) : ihtmltable;
기능 getCount : 정수;
함수 getTableByIndex (색인 : 정수) : tdxwebtable;
함수 getTableByName (aname : String) : tdxwebtable;
공공의
생성자 생성 (doc : ihtmldocument2);
파괴자 파괴; 재정의;
속성 tableInterfaceByName [aname : string] : ihtmltable read gettableinterfacebyname;
Property TableInterfaceByIndex [Index : Integer] : ihtmltable read gettableinterfacebyindex;
Property TableByName [aname : String] : tdxwebtable read getTableByName;
Property TableByIndex [index : Integer] : tdxwebtable read gettablebyindex;
속성 문서 : ihtmldocument2 읽기 fdocument write setDocument;
속성 수 : 정수 읽기 GetCount;
끝;
tdxwebtable = 클래스
사적인
ftableinterface : ihtmltable;
함수 getRowcount : 정수;
절차 settableInterface (const 값 : ihtmltable);
함수 getCell (Acol, Arow : Integer) : 문자열;
함수 getRowColCount (RowIndex : Integer) : 정수;
함수 getInnerHtml : String;
함수 getInnerText : String;
기능 getCellElement (Acol, Arow : Integer) : ihtmltablecell;
공공의
생성자 생성 (atable : ihtmltable);
속성 테이블 interface : ihtmltable 읽기 ftableinterface write settableinterface;
속성 RowCount : 정수 읽기 GetRowCount;
속성 셀 [Acol : Integer; Arow : Integer] : 문자열 읽기 GetCell;
Property CellElement [Acol : Integer; Arow : Integer] : ihtmltablecell getCellElement를 읽습니다.
속성 RowColCount [RowIndex : Integer] : 정수 읽기 GetRowColCount;
속성 innerhtml : 문자열 읽기 getinnerhtml;
속성 내용 : 문자열 읽기 getInnerText;
끝;
tdxwebcombobox = 클래스
사적인
fhtmlSelect : ihtmlSelectElement;
기능 getCount : 정수;
절차 setitemIndex (const value : Integer);
함수 getItemIndex : 정수;
함수 getName : String;
절차 setName (const value : String);
함수 getValue : 문자열;
절차 setValue (const 값 : String);
절차 setcombinterface (const 값 : ihtmlSelectElement);
함수 getItembyName (Elename : String) : String;
함수 getItemByIndex (색인 : 정수) : 문자열;
함수 getItemattribute (색인 : 정수; attribName : String) : Olevariant;
공공의
생성자 생성 (awebcombo : ihtmlSelectElement);
절차 추가 (ELE : IHTMLELEMENT);
프로 시저 삽입 (ELE : IHTMLELEMENT; index : Integer);
절차 제거 (색인 : 정수);
Property Combinterface : ihtmlSelectElement read fhtmlSelect 쓰기 setcombinterface;
속성 수 : 정수 읽기 GetCount;
속성 itemindex : 정수 읽기 getitemindex write setitemindex;
속성 itembyIndex [index : Integer] : 문자열 읽기 getItemByIndex;
속성 itembyName [Elename : String] : String read getItembyName;
속성 itemattribute [index : indeger; attribname : string] : Olevariant read getItemattribute;
속성 이름 : 문자열 읽기 getName write setName;
속성 값 : 문자열 읽기 getValue 쓰기 setValue;
끝;
구현
끝.
HTMLPARSER 구문 분석 클래스의 코드 구현 단위
암호
(************************************************* *****)
(*Dexian Studio*)
(*HTML Parsing Unit Library*)
(**)
(*DXHTMLPARSER 장치*)
(*저작권 (C) 2008-2010 유휴 상태 없음*)
(*이메일 : [email protected] : 75492895*)
(************************************************* *****)
단위 DXHTMLPARSER;
인터페이스
Windows, MSHTML, ActiveX, DXHTMLELEMENT, 양식을 사용합니다.
유형
tdxhtmlparser = 클래스
사적인
fhtmldoc : ihtmldocument2;
fhtml : 문자열;
fwebtables : tdxtablecollection;
fwebelements : tdxwebelementCollection;
fwebcomb : tdxwebcombobox;
절차 sethtml (const 값 : String);
함수 getwebcombobox (aname : string) : tdxwebcombobox;
공공의
생성자 생성;
파괴자 파괴; 재정의;
속성 html : 문자열 읽기 fhtml write sethtml;
속성 webtables : tdxtablecollection fwebtables를 읽습니다.
Property WebElements : tdxWebElementCollection 읽기 fwebelements;
Property WebComBobox [이름 : 문자열] : tdxwebcombobox read getwebcombobox;
끝;
구현
{tdxhtmlparser}
생성자 tdxhtmlparser.create;
시작하다
공동화 (nil);
// ihtmldocument2 인터페이스를 만듭니다
CocreateInstance (class_htmldocument, nil, clsctx_inproc_server, iid_ihtmldocument2, fhtmldoc);
assert (fhtmldoc <> nil, '빌드 htmldocument 인터페이스 실패');
fhtmldoc.set_designmode ( 'on');
(fhtmldoc.readystate = 'complete')는 그렇지 않습니다
시작하다
수면 (1);
Application.ProcessMessages;
끝;
fwebtables : = tdxtablecollection.create (fhtmldoc);
fwebelements : = tdxwebelementcollection.create (nil);
fwebcomb : = tdxwebcombobox.create (nil);
끝;
소멸자 tdxhtmlparser.destroy;
시작하다
fwebtables.free;
fwebelements.free;
fwebcomb.free;
상담;
상속;
끝;
함수 tdxhtmlparser.getWebcombobox (aname : String) : tdxwebcombobox;
시작하다
fwebelements.collection <> nil이면
시작하다
fwebcomb.combinterface : = fwebelements.elementbyName [aname]으로 ihtmlSelectElement;
결과 : = fwebcomb;
끝
다른 결과 : = nil;
끝;
절차 tdxhtmlparser.sethtml (const value : String);
시작하다
fhtml <> 값이라면
시작하다
fhtml : = 값;
fhtmldoc.body.innerhtml : = fhtml;
fwebelements.collection : = fhtmldoc.all;
끝;
끝;
끝.