Récemment, je simule souvent les soumissions de pages Web et je reviens au code source de la page Web, puis j'obtiens les éléments correspondants dans la page Web. En recherchant, j'ai trouvé plusieurs versions Delphi des classes HTMLParser. J'ai donc pensé que s'il y avait un navigateur sur l'interface, nous pouvons utiliser des éléments de page Web via l'interface de document de WebBrowser, ce qui est très pratique! Cependant, si vous simulez la soumission de la page Web, WebBrowser n'apparaît pas nécessairement sur l'interface. L'objet à l'intérieur peut réaliser HTML après l'avoir analysé, la recherche de MSDN, puis le Google, il fonctionne, et la méthode de construction est la suivante:
// Créer une interface ihtmldocument2
COCreateInstance (class_htmldocument, nil, CLSCTX_INPROC_SERVER, IID_IHTMLDocument2, fhtmlDoc);
Une fois l'interface créée, les éléments de document peuvent être analysés, ce qui est très rafraîchissant!
En combinant mes propres opérations uniques, j'ai encapsulé certains éléments de page Web tels que ComboBox, Table, Frame, etc. et implémenté un HTMLParser.
Seule une déclaration est donnée ici, veuillez télécharger le code à la fin
Code
(************************************************* *****)
(* Dexian Studio *)
(* Bibliothèque de classe de fonctionnement de l'élément de page Web *)
(**)
(* Unité dxhtmlelement *)
(* Copyright (c) 2008-2010 Pas de ralenti *)
(* Courriel: [email protected]: 75492895 *)
(************************************************* *****)
unité dxhtmlelement;
interface
Utilise Windows, Sysutils, ClipBrd, Mshtml, ActiveX, Olectls, Graphics, Typinfo;
{Get Element Type}
Fonction ISSelectElement (eleelement: ihtmlelement): booléen;
fonction ispwdelement (elelement: ihtmlelement): booléen;
fonction isTextElement (élément: ihtmlelement): booléen;
fonction IsTableElement (élément: ihtmlelement): booléen;
Fonction IseElementCollection (élément: ihtmlelement): booléen;
fonction ischKelement (élément: ihtmlelement): booléen;
Fonction Isradiobtnelement (élément: ihtmlelement): booléen;
fonction ismemoelement (élément: ihtmlelement): booléen;
Fonction isFormElement (élément: ihtmlelement): booléen;
Fonction isImGelement (élément: ihtmlelement): booléen;
Fonction isInImGelement (élément: ihtmlelement): booléen;
fonction isLabelelement (élément: ihtmlelement): booléen;
fonction isLinkElement (élément: ihtmlelement): booléen;
Fonction IsListElement (élément: ihtmlelement): booléen;
Fonction isControlelement (élément: ihtmlelement): booléen;
fonction isObjectElement (élément: ihtmlelement): booléen;
Fonction isFrameElement (élément: ihtmlelement): booléen;
Fonction isInputBtnelement (élément: ihtmlelement): booléen;
Fonction isInHidDenElement (élément: ihtmlelement): booléen;
Fonction IssUbmitelement (élément: ihtmlelement): booléen;
{Obtenir des données d'imgelement}
fonction getpicIndex (doc: ihtmlDocument2; src: string; alt: string): entier;
fonction getPicement (doc: ihtmlDocument2; imGname: string; src: string; alt: string): ihtmlimgelement;
fonction getRegCodepic (doc: ihtmlDocument2; imGname: string; src: string; alt: string): tpiCture;
fonction getRegCodepic (doc: ihtmlDocument2; index: entier): tpiCture;
fonction getRegCodepic (doc: ihtmlDocument2; élément: ihtmlimgement): tPictture; surcharge;
taper
TobjectFromlResult = fonction (lresult: lresult; const iid: tiid; wparam: wparam; out pobject): hresult;
TementType = (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);
fonction getElementType (élément: ihtmlelement): tementType;
fonction getElementTyPename (élément: ihtmlelement): String;
fonction gethtmltablecell (atable: ihtmlTable; arow, acol: entier): ihtmlelement;
fonction gethtmlTable (adoc: ihtmlDocument2; aindex: entier): ihtmlTable;
fonction getwebbrowserhtmltablecellText (doc: ihtmlDocument2;
const TableIndex, RowIndex, Colindex: entier; var resvalue: String): boolean;
Fonction gethtmltableRowHtml (atable: ihtmlTable; arow: Integer): ihtmlelement;
fonction getwebbrowserhtmltablecellhtml (doc: ihtmlDocument2;
const TableIndex, RowIndex, Colindex: entier; var resvalue: String): boolean;
fonction gehtmlTableHtml (atable: ihtmlTable; arow: entier): ihtmlelement;
fonction getWebBrowserHtmlTableHtml (doc: ihtmlDocument2;
const TableIndex, RowIndex: entier; var resvalue: String): booléen;
taper
TdxWebframeCollection = classe;
TdxWeBelementCollection = classe;
TloadState = (doc_loading, doc_complèted, doc_invalidate);
Tdxwebframe = classe
Privé
Fframe: ihtmlwindow2;
FemementCollections: TDXWEBElementCollection;
FWEBFRAMECOLLECTIONS: TDXWEBFRAMECOllection;
fonction getrc: string;
fonction getElementCount: entier;
Fonction getWebFrameCollections: tdxWebFrameCollection;
Fonction GetElementCollections: TDXWEBElementCollection;
fonction getDocument: ihtmlDocument2;
fonction getReadState: tloadState;
Fonction GetSoLed: Boolean;
Procédure setFrame (constamment de const: ihtmlwindow2);
fonction getName: String;
publique
Constructor Create (iframe: ihtmlwindow2);
Destructor détruise; remplacer;
Frame de propriété: ihtmlwindow2 read fframe write setFrame;
propriété src: String Read getrc;
Document de propriété: ihtmlDocument2 Read GetDocument;
Nom de la propriété: String Read getName;
Frames de propriété: TDXWEBFRAMECOllection Read GetWebFrameCollections;
Property ElementCount: Integer Read GetElementCount;
Property ElementCollections: TDXWEBElementCollection Read GetElementCollections;
Propriété ReadyState: TloadState Read GetReadState;
Propriété Isloaded: Boolean Read GetSoLeded;
fin;
TdxwebframeCollection = classe
Privé
FframeCollection: ihtmlframesCollection2;
Cadre: TDXWEBFRAME;
fonction getCount: entier;
fonction getFrameInterfaceByIndex (index: entier): ihtmlwindow2;
fonction getFrameInterfaceByName (name: string): ihtmlwindow2;
fonction getFrameByIndex (index: entier): tdxWebFrame;
fonction getFrameByName (name: string): tdxWebFrame;
Procédure setFrameCollection (constante: ihtmlframesCollection2);
publique
Constructeur create (acollection: ihtmlframesCollection2);
Destructor détruise; remplacer;
Propriété FrameCollection: ihtmlframesCollection2 Read fframeCollection Write SetFrameCollection;
Nombre de propriétés: Integer Read GetCount;
propriété frameinterfaceByIndex [index: entier]: ihtmlwindow2 read getFrameInterfaceByIndex;
propriété frameinterfacebyname [name: string]: ihtmlwindow2 read getFrameInterfaceByName;
Property FrameByIndex [index: Integer]: tdxWebFrame read getFrameByIndex;
propriété framebyName [name: string]: tdxwebframe read getFrameByName;
fin;
TdxWeBelementCollection = classe
Privé
FCollection: ihtmlelementCollection;
FchildCollection: TDXWEBElementCollection;
fonction getCollection (index: string): tdxWeBelementCollection;
fonction getCount: entier;
fonction getElement (itemName: String; index: entier): ihtmlelement;
fonction getElementByName (itemName: String): ihtmlelement;
fonction getElementByIndex (index: entier): ihtmlelement;
Procédure setCollection (constamment de const: ihtmleMelementCollection);
publique
Constructeur créé (acollection: ihtmlelementCollection);
Destructor détruise; remplacer;
Collection de propriétés: ihtmlelementCollection Read FCollection Write SetCollection;
propriété childElementCollection [index: string]: tdxwebelementCollection read getCollection;
Property ElementCount: Integer Read GetCount;
élément de propriété [itemName: String; index: entier]: ihtmlelement read GetElement;
Property ElementByName [itemName: String]: ihtmlelement read getElementByName;
Property ElementByIndex [index: Integer]: ihtmlelement read GetElementByIndex;
fin;
TLinkCollection = class (tdxWeBelementCollection)
fin;
Tdxwebtable = classe;
TdxtableCollection = classe
Privé
FtableCollection: ihtmlementmentCollection;
FDocument: ihtmlDocument2;
FWEBTABLE: TDXWEBTABLE;
fonction getTableInterfaceByName (aname: string): ihtmlTable;
Procédure setDocument (valeur: ihtmlDocument2);
fonction getTableInterfaceByIndex (index: entier): ihtmlTable;
fonction getCount: entier;
function getTableByIndex (index: entier): TDXWEBTABLE;
fonction getTableByName (aname: string): tdxwebable;
publique
Constructeur create (doc: ihtmlDocument2);
Destructor détruise; remplacer;
propriété TableInterfaceByName [aname: string]: ihtmlTable read getTtableInterfaceByName;
propriété TableInterfaceByIndex [index: entier]: ihtmlTable read getTableInterfaceByIndex;
propriété tableByName [aname: string]: tdxwebtable read getTableByName;
Property TableByIndex [index: Integer]: TDXWEBTABLE LEAT GetTableByIndex;
Document de propriété: IHTMLDocument2 Read FDocument Write SetDocument;
Nombre de propriétés: Integer Read GetCount;
fin;
Tdxwebtable = classe
Privé
FTableInterface: ihtmlTable;
fonction getrowCount: entier;
Procédure SettableInterface (constamment de const: ihtmlTable);
fonction getCell (acol, arow: entier): String;
fonction getrowColCount (RowIndex: entier): entier;
fonction getInnerHtml: String;
fonction getInnerText: String;
fonction getCellement (acol, arow: entier): ihtmltableCell;
publique
Constructor Create (atable: ihtmlTable);
propriété TableInterface: ihtmlTable read ftableinterface write SettableInterface;
Property RowCount: Integer Read GetRowCount;
Property Cell [ACOL: INTEGER; AROW: INTEGER]: String Read GetCell;
Property CellElement [ACOL: INTEGER; AROW: INTEGER]: IHTMLTABLECELL LEAD GETRELLELlement;
propriété RowColCount [RowIndex: Integer]: Integer Read GetRowColCount;
propriété innerhtml: String read GetInnerHtml;
propriété InnerText: String Read GetInnerText;
fin;
TdxwebcomboBox = classe
Privé
FhtmlSelect: ihtmlSelectElement;
fonction getCount: entier;
Procédure setItemIndex (const Value: Integer);
fonction getItemIndex: entier;
fonction getName: String;
Procédure setName (const Value: String);
fonction getValue: String;
Procédure setValue (const Value: String);
Procédure setCombInterface (constamment: ihtmlSelectElement);
fonction getItembyName (eLename: String): String;
function getItembyIndex (index: entier): String;
fonction getItemAttribute (index: entier; attribname: string): olevariant;
publique
constructeur Create (awebcombo: ihtmlSelectElement);
procédure add (ele: ihtmlelement);
Insert de procédure (ELE: ihtmlelement; index: entier);
procédure supprime (index: entier);
propriété Combinterface: ihtmlSelectElement Lire fhtmlSelect write setcombInterface;
Nombre de propriétés: Integer Read GetCount;
Propriété ItemIndex: Integer Read getItemIndex Write SetItemIndex;
la propriété itemByIndex [index: entier]: String read getItembyIndex;
Propriété ItemByName [eLename: String]: String Read getItembyName;
propriété itemAttribute [index: Integer; attribName: String]: olevariant read getItemAttribute;
Nom de la propriété: String Read GetName Write SetName;
Valeur de la propriété: String Read GetValue Write SetValue;
fin;
Mise en œuvre
fin.
Unité d'implémentation de code de la classe d'analyse htmlparser
Code
(************************************************* *****)
(* Dexian Studio *)
(* Bibliothèque d'unité d'analyse HTML *)
(**)
(* Unité dxhtmlparser *)
(* Copyright (c) 2008-2010 Pas de ralenti *)
(* Courriel: [email protected]: 75492895 *)
(************************************************* *****)
unité dxhtmlparser;
interface
Utilise Windows, Mshtml, ActiveX, DXHTMLElement, Forms;
taper
Tdxhtmlparser = classe
Privé
FhtmlDoc: ihtmlDocument2;
Fhtml: chaîne;
Fwebtables: tdxtableCollection;
FWEBELlements: TDXWEBElementCollection;
Fwebcomb: tdxwebcomboBox;
Procédure Sethtml (const Value: String);
Fonction getWebCombOx (aname: string): tdxwebcomboBox;
publique
constructeur créé;
Destructor détruise; remplacer;
Propriété html: chaîne Read fhtml Write Sethtml;
Propriété WebTables: TDXTableCollection Read Fwebtables;
Propriété WebElements: TDXWEBElementCollection Lire FWeBelements;
propriété webComboBox [nom: string]: tdxwebcomboBox read getwebcomboBox;
fin;
Mise en œuvre
{TDXHTMLPARSER}
constructeur tdxhtmlparser.create;
Commencer
Coinitialize (nul);
// Créer une interface ihtmldocument2
COCreateInstance (class_htmldocument, nil, CLSCTX_INPROC_SERVER, IID_IHTMLDocument2, fhtmlDoc);
Affirmer (fhtmlDoc <> nil, 'build htmldocument a échoué');
Fhtmldoc.set_designMode ('on');
Bien que non (fhtmldoc.readystate = 'complet')
Commencer
sommeil (1);
application.ProcessMessages;
fin;
Fwebtables: = tdxtableCollection.Create (fhtmlDoc);
FWeBelements: = tdxWeBelementCollection.Create (nil);
Fwebcomb: = tdxwebcomboBox.create (nil);
fin;
destructor tdxhtmlparser.destroy;
Commencer
Fwebtables.free;
Fwebelements.free;
Fwebcomb.free;
Conseiller;
hérité;
fin;
fonction tdxhtmlparser.getWebcomboBox (aname: string): tdxWebcomboBox;
Commencer
Si fwebelements.collection <> nil alors
Commencer
Fwebcomb ...............ancementdantoisement de la FebElements.ElementByName [Aname] As ihtmlSelectElement;
Résultat: = fwebcomb;
fin
Sinon Résultat: = NIL;
fin;
Procédure tdxhtmlParser.sethtml (constamment de constructeurs: chaîne);
Commencer
Si fhtml <> valeur alors
Commencer
Fhtml: = valeur;
Fhtmldoc.body.innerhtml: = fhtml;
FweBelements.collection: = fhtmlDoc.all;
fin;
fin;
fin.