Baru -baru ini, saya sering mensimulasikan pengiriman halaman web dan kembali ke kode sumber halaman web, dan kemudian mendapatkan elemen yang sesuai di halaman web Mencari, saya menemukan beberapa versi kelas HTMLParser Delphi. Jadi saya pikir jika ada browser di antarmuka, kami dapat mengoperasikan elemen halaman web melalui antarmuka dokumen WebBrowser, yang sangat nyaman! Namun, jika Anda mensimulasikan pengiriman halaman web, WebBrowser tidak selalu muncul di antarmuka. Objek di dalamnya dapat mewujudkan HTML setelah mengupasnya, mencari MSDN, dan kemudian Google, dan metode konstruksi adalah sebagai berikut:
// Buat antarmuka ihtmldocument2
CocreateInstance (class_htmldocument, nil, clsctx_inproc_server, iid_ihtmldocument2, fhtmldoc);
Setelah antarmuka dibuat, elemen dokumen dapat diuraikan, yang sangat menyegarkan!
Menggabungkan operasi unik saya sendiri, saya telah merangkum beberapa elemen halaman web seperti ComboBox, Table, Frame, dll. Dan mengimplementasikan htmlparser.
Hanya deklarasi yang diberikan di sini, silakan unduh kode di akhir
Kode
(*********************************************** *****)
(*Dexian Studio*)
(*Library Kelas Operasi Elemen Halaman Web*)
(**)
(*DXHTMLELEMENT UNIT*)
(*Hak Cipta (C) 2008-2010 Tanpa Idle*)
(*Email: [email protected]: 75492895*)
(*********************************************** *****)
unit dxhtmlelement;
antarmuka
Menggunakan Windows, Sysutils, ClipBrd, Mshtml, ActiveX, Olectrls, Graphics, Typinfo;
{Dapatkan tipe elemen}
Fungsi IsselectElement (Eleelement: ihtmlelement): boolean;
Fungsi ISPWDElement (Eleelement: ihtmlelement): boolean;
Fungsi isTextElement (elemen: ihtmlelement): boolean;
Fungsi IStableLement (Elemen: IHTMLElement): Boolean;
fungsi iseLementCollection (elemen: ihtmlelement): boolean;
fungsi ischkeLement (elemen: ihtmlelement): boolean;
Fungsi Isradiobtnelement (elemen: ihtmlelement): boolean;
fungsi isMemoElement (elemen: ihtmlelement): boolean;
function isFormElement (elemen: ihtmlelement): boolean;
fungsi isimgeLement (elemen: ihtmlelement): boolean;
fungsi isinimgelement (elemen: ihtmlelement): boolean;
fungsi islabelelement (elemen: ihtmlelement): boolean;
fungsi islinkElement (elemen: ihtmlelement): boolean;
Function IsListElement (Elemen: IHTMLElement): Boolean;
function isControlelement (elemen: ihtmlelement): boolean;
Fungsi isObjectElement (elemen: ihtmlelement): boolean;
Fungsi isFrameElement (elemen: ihtmlelement): boolean;
fungsi isInputBtnelement (elemen: ihtmlelement): boolean;
Fungsi isInhiddenElement (elemen: ihtmlelement): boolean;
fungsi issubmitelement (elemen: ihtmlelement): boolean;
{Dapatkan data imgelement}
fungsi getPicIndex (doc: ihtmldocument2; src: string; alt: string): integer;
function getPeCeLement (doc: ihtmldocument2; imgname: string; src: string; alt: string): ihtmlimgelement;
Fungsi getregcodepic (doc: ihtmldocument2; imgname: string; src: string; alt: string): tpicture;
fungsi getRegCodepic (DOC: IHTMLDOCUMEN2; INDEX: INTEGER): TPICTURE;
Fungsi getRegCodepic (DOC: IHTMLDOCUMEN2; Elemen: IHTMLIMGElement): tpicture; kelebihan muatan;
jenis
TobjectFromlResult = fungsi (lResult: lResult; const iid: tiid; 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);
function getElementType (elemen: ihtmlelement): telementType;
function getElementTypeName (elemen: ihtmlelement): string;
fungsi getHtmlTableCell (atable: ihtmltable; arow, acol: integer): ihtmlelement;
function getHtmltable (ADOC: ihtmldocument2; aindex: integer): ihtmltable;
fungsi getWebBrowsERHTMLTableCellText (DOC: IHTMLDOCUMEN2;
const tableIndex, rowindex, colindex: integer; var resvalue: string): boolean;
fungsi getHtmlTablerowHtml (atable: ihtmltable; arow: integer): ihtmlelement;
fungsi getWebBrowserhtmlTableCellHtml (doc: ihtmldocument2;
const tableIndex, rowindex, colindex: integer; var resvalue: string): boolean;
fungsi gehtmltableHtml (atable: ihtmltable; arow: integer): ihtmlelement;
fungsi getWebBrowserhtmltableHtml (doc: ihtmldocument2;
const tableIndex, rowindex: integer; var resvalue: string): boolean;
jenis
TdxWebFramecollection = class;
TdxWeBelementCollection = class;
TloadState = (doc_loading, doc_completed, doc_invalidate);
TdxWebFrame = kelas
Pribadi
Fframe: ihtmlwindow2;
FelementCollections: TdxWebelementCollection;
FWebFramecollections: tdxWebFramecollection;
fungsi getsrc: string;
Function GetElementCount: Integer;
fungsi getWebFramecollections: tdxwebframeCollection;
Function GetElementCollections: TDXWeBelementCollection;
fungsi getDocument: ihtmldocument2;
fungsi getReadState: tloadState;
fungsi getisloaded: boolean;
prosedur setframe (nilai const: ihtmlwindow2);
function getName: string;
publik
Constructor create (iframe: ihtmlWindow2);
Destructor menghancurkan; override;
Bingkai Properti: IHTMLWindow2 Baca FFRAME Tulis setframe;
Properti SRC: String Read GetSrc;
Dokumen Properti: ihtmldocument2 Baca getDocument;
Nama Properti: String Baca GetName;
Bingkai Properti: TDXWebFramecollection baca getWebFramecollections;
Properti ElementCount: Integer Read GetElementCount;
ElementCollections Properti: TDXWeBelementCollection Baca GetElementCollections;
Properti ReadyState: tloadState baca getReadState;
Properti ISLOADED: Boolean baca getisloaded;
akhir;
TdxWebFramecollection = kelas
Pribadi
FframeCollection: ihtmlFramescollection2;
Bingkai: tdxwebframe;
fungsi getCount: integer;
Fungsi getFrameInterfaceByIndex (indeks: integer): ihtmlwindow2;
Fungsi getFrameInterfaceByName (Nama: String): ihtmlWindow2;
fungsi getFrameByIndex (indeks: integer): tdxwebframe;
function getFramebyName (Nama: string): tdxwebframe;
prosedur setframecollection (nilai const: ihtmlframescollection2);
publik
Constructor create (Acollection: ihtmlFramescollection2);
Destructor menghancurkan; override;
Properti Framecollection: ihtmlFramescollection2 Baca fframecollection Tulis setframecollection;
Hitungan Properti: Integer Read GetCount;
Properti FrameInterfaceByIndex [indeks: integer]: ihtmlwindow2 baca getFrameInterfaceByIndex;
Properti FrameInterfaceByName [Nama: String]: IHTMLWindow2 Baca GetFrameInterfaceByName;
Properti FrameByIndex [Indeks: Integer]: TDXWebFrame Baca getFrameByIndex;
Properti FrameByName [Nama: String]: TDXWebFrame Baca GetFramebyName;
akhir;
TdxWeBelementCollection = kelas
Pribadi
Fcollection: ihtmlelementCollection;
FChildCollection: TdxWebelementCollection;
fungsi getCollection (indeks: string): tdxwebelementCollection;
fungsi getCount: integer;
function getElement (itemName: string; index: integer): ihtmlelement;
function getElementByName (itemName: string): ihtmlelement;
function getElementByIndex (indeks: integer): ihtmlelement;
Prosedur setCollection (nilai const: ihtmlelementCollection);
publik
Konstruktor Create (Acollection: IHTMLelementCollection);
Destructor menghancurkan; override;
Koleksi Properti: ihtmlelementCollection Baca fcollection menulis setCollection;
Properti ChildElementCollection [indeks: string]: tdxweBelementCollection baca getCollection;
Properti ElementCount: Integer Read GetCount;
elemen properti [itemName: string; index: integer]: ihtmlelement baca getElement;
properti elementByName [itemName: string]: ihtmlelement baca getElementByName;
Properti ElementByIndex [Indeks: Integer]: IHTMLElement Read GetElementByIndex;
akhir;
TlinkCollection = class (tdxweBelementCollection)
akhir;
TdxWebTable = class;
TdxtableCollection = kelas
Pribadi
Ftablecollection: ihtmlelementCollection;
Fdocument: ihtmldocument2;
Fwebtable: tdxwebtable;
function getTableInterfaceByName (aname: string): ihtmltable;
prosedur setDocument (nilai: ihtmldocument2);
function getTableIndFaceByIndex (indeks: integer): ihtmltable;
fungsi getCount: integer;
function getTableIndex (indeks: integer): tdxwebtable;
function getTableByName (aname: string): tdxWebTable;
publik
Constructor create (doc: ihtmldocument2);
Destructor menghancurkan; override;
Properti TableInterfaceByName [aname: string]: ihtmltable baca gettableinterfaceByName;
Properti TableInterfaceByIndex [indeks: integer]: ihtmltable baca getTableInterfaceByIndex;
Properti TableByName [aname: string]: tdxWebTable baca getTableByName;
Properti TableByIndex [Indeks: Integer]: TDXWebTable Read GetTableByIndex;
Dokumen Properti: ihtmldocument2 Baca fdocument write setDocument;
Hitungan Properti: Integer Read GetCount;
akhir;
TdxWebTable = kelas
Pribadi
Ftableinterface: ihtmltable;
fungsi getrowcount: integer;
Prosedur SettableInterface (Nilai Const: IHTMLTable);
fungsi getCell (acol, arow: integer): string;
fungsi getRowColCount (rowindex: integer): integer;
fungsi getInnerHtml: string;
fungsi getInnertext: string;
fungsi getCellElement (acol, arow: integer): ihtmltablecell;
publik
Constructor create (atable: ihtmltable);
Properti TableInterface: ihtmltable baca ftableInterface Tuliskan settableInterface;
Properti RowCount: Integer Read GetrowCount;
Cell Properti [ACOL: Integer; Arow: Integer]: String baca getCell;
properti sellement [acol: integer; arow: integer]: ihtmltablecell baca getCellElement;
Properti RowColCount [Rowindex: Integer]: Integer Read getRowColCount;
Properti InnerHTML: String baca getInnerHtml;
Properti Innertext: String Read getInnertext;
akhir;
TdxWebComboBox = kelas
Pribadi
Fhtmlselect: ihtmlselectElement;
fungsi getCount: integer;
prosedur setitemIndex (nilai const: integer);
fungsi getItemIndex: integer;
function getName: string;
Prosedur SetName (Const Value: String);
function getValue: string;
prosedur setValue (nilai const: string);
Prosedur SetCombInterface (Nilai Const: IHTMLSelectElement);
function getItembyName (elename: string): string;
function getItembyIndex (indeks: integer): string;
function getIteMattribute (indeks: integer; attribname: string): olevariant;
publik
constructor create (Awebcombo: ihtmlSelectElement);
Prosedur Tambah (ELE: IHTMLELEMENT);
Sisipkan Prosedur (ELE: IHTMLElement; Indeks: Integer);
Prosedur Hapus (indeks: integer);
Properti Combinterface: IHTMLSelectElement Read fhtmlselect menulis setCombInterface;
Hitungan Properti: Integer Read GetCount;
Properti ItemIndex: Integer Read getItemIndex menulis setitemIndex;
Properti ItemByIndex [indeks: integer]: string baca getItembyIndex;
Properti ItemByName [Elename: String]: String baca getItembyName;
Properti ItemAttribute [indeks: integer; attribname: string]: olevariant baca getIteMattribute;
Nama Properti: String Baca GetName Tulis setName;
Nilai Properti: String Baca GetValue Tulis setValue;
akhir;
Pelaksanaan
akhir.
Unit Implementasi Kode Kelas Parsing HTMLParser
Kode
(*********************************************** *****)
(*Dexian Studio*)
(*HTML Parsing Unit Library*)
(**)
(*Unit dxhtmlparser*)
(*Hak Cipta (C) 2008-2010 Tanpa Idle*)
(*Email: [email protected]: 75492895*)
(*********************************************** *****)
unit dxhtmlparser;
antarmuka
Menggunakan Windows, Mshtml, ActiveX, DXHTMLElement, Forms;
jenis
TDXHTMLPARSER = Kelas
Pribadi
Fhtmldoc: ihtmldocument2;
Fhtml: string;
FWebTables: tdxtableCollection;
FWebelements: TdxWebelementCollection;
Fwebcomb: tdxwebcomboBox;
Prosedur SetHtml (Nilai Const: String);
fungsi getWebComboBox (aname: string): tdxwebcomboBox;
publik
konstruktor membuat;
Destructor menghancurkan; override;
Properti html: string baca fhtml tulis setHtml;
Properti WebTables: tdxtableCollection Baca fWebTables;
Webelements properti: tdxwebelementCollection baca fwebelements;
properti webcomboBox [nama: string]: tdxwebcomboBox baca getWebComboBox;
akhir;
Pelaksanaan
{Tdxhtmlparser}
konstruktor tdxhtmlparser.create;
Mulai
Coinitialize (nil);
// Buat antarmuka ihtmldocument2
CocreateInstance (class_htmldocument, nil, clsctx_inproc_server, iid_ihtmldocument2, fhtmldoc);
Assert (fhtmldoc <> nil, 'Bangun antarmuka htmldocument gagal');
Fhtmldoc.set_designmode ('on'); atur ke mode desain, tidak ada eksekusi skrip
Syal tidak (fhtmldoc.readystate = 'complete') do
Mulai
tidur (1);
Application.ProcessMessages;
akhir;
FWebTables: = tdxtablecollection.create (fhtmldoc);
FweBelements: = tdxwebelementCollection.create (nil);
Fwebcomb: = tdxwebcomboBox.create (nil);
akhir;
destructor tdxhtmlparser.destroy;
Mulai
FWebTables.Free;
Fwebelements.free;
Fwebcomb.free;
Couninitialize;
diwariskan;
akhir;
fungsi tdxhtmlparser.getWebComboBox (aname: string): tdxwebcomboBox;
Mulai
Jika fweBelements.collection <> nil lalu
Mulai
Fwebcomb.comBinterface: = fwebelements.elementbyname [aname] sebagai ihtmlselectElement;
Hasil: = fwebcomb;
akhir
Hasil lain: = nil;
akhir;
Prosedur tdxhtmlparser.setHtml (nilai const: string);
Mulai
Jika nilai FHTML <>
Mulai
Fhtml: = nilai;
Fhtmldoc.body.innerhtml: = fhtml;
FweBelements.collection: = fhtmldoc.all;
akhir;
akhir;
akhir.