В последнее время я часто моделирую материалы для веб -страницы и возвращаюсь к исходному коду веб -страницы, а затем получаю соответствующие элементы на веб -странице Поиск, я нашел несколько версий Delphi классов HTMLPARSER. Поэтому я подумал, что если в интерфейсе есть браузер, мы можем использовать элементы веб -страницы через интерфейс документа WebBrowrowser, что очень удобно! Однако, если вы имитируете представление веб -страницы, WebBrowser не обязательно появляется в интерфейсе. Объект внутри него может реализовать HTML после анализа его, поиска MSDN, а затем Google It, он работает, и метод строительства выглядит следующим образом:
// Создать интерфейс ihtmldocument2
Cocreateinstance (class_htmldocument, nil, clsctx_inproc_server, iid_ihtmldocument2, fhtmldoc);
После создания интерфейса элементы документа могут быть проанализированы, что очень освежает!
Комбинируя свои собственные уникальные операции, я инкапсулировал некоторые элементы веб -страницы, такие как Combobox, таблица, кадр и т. Д., И реализовал HTMLPARSER.
Здесь дано только объявление, пожалуйста, загрузите код в конце
Код
(******************************************* *****)
(*Dexian Studio*)
(*Библиотека классов класса веб -страницы*)
(**)
(*DXHTMLEMEMENT UNIT*)
(*Copyright (C) 2008-2010
(*Электронная почта: [email protected]: 75492895*)
(******************************************* *****)
единица dxhtmlelement;
интерфейс
Использует Windows, Sysutils, ClipBrd, MSHTML, ActiveX, Olectrls, Graphics, Typinfo;
{Получить тип элемента}
Функция isselectelement (eleelement: ihtmlelement): логический;
Функция ispwdelement (eleelement: ihtmlelement): boolean;
функция istextElement (элемент: ihtmlelement): логический;
функция stableElement (элемент: ihtmlelement): логический;
функция IselementCollection (элемент: ihtmlelement): логический;
функция ischkelement (элемент: ihtmlelement): логический;
Функция isradiobtnelent (элемент: ihtmlelement): boolean;
функция ISMEMOEMEMENT (Элемент: IHTMLELEMENT): BOOLEAN;
функция IsformElement (элемент: ihtmlelement): логический;
Функция Isimgelement (элемент: ihtmlelement): логический;
функция isInimgelement (элемент: ihtmlelement): логический;
Функция IslaBelelement (элемент: ihtmlelement): boolean;
Функция islinkelement (элемент: ihtmlelement): логический;
Функция islistElement (элемент: ihtmlelement): логический;
Функция iscontrolelement (элемент: ihtmlelement): boolean;
функция isobjectelement (элемент: ihtmlelement): логический;
Функция iSframeElement (элемент: ihtmlelement): boolean;
Функция ISInputNtement (элемент: ihtmlelement): boolean;
Функция isInhiddelement (элемент: ihtmlelement): логический;
Функция IssubmitElement (элемент: ihtmlelement): логический;
{Получить данные Imgelement}
функция getPicindex (doc: ihtmldocument2; src: string; alt: string): целое число;
функция getPicelement (doc: ihtmldocument2; imgname: string; src: string; alt: string): ihtmlimgelement;
Функция getregeDepic (doc: ihtmldocument2; imgname: string; src: string; alt: string): tpicture;
Функция getregeDepic (doc: ihtmldocument2; индекс: целое число): tpicture;
функция getregeDepic (doc: ihtmldocument2; element: ihtmlimgelement): tpicture; перегрузка;
тип
TobjectFromlResult = function (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 (элемент: ihtmlelement): TelementType;
функция getElementTypEname (элемент: ihtmlelement): string;
Функция gethtmltablecell (atable: ihtmltable; arow, acol: integer): ihtmlelement;
функция gethtmltable (Adoc: ihtmldocument2; aindex: Integer): ihtmltable;
function getWebBrowserHtmlTableCellText (DOC: IHTMLDOCUMENT2;
const tableIndex, rowindex, colindex: integer; var resvalue: string): boolean;
Функция gethtmltablerowhtml (atable: ihtmltable; arow: integer): ihtmlelement;
function getWebBrowserHtmltableCellhtml (doc: ihtmldocument2;
const tableIndex, rowindex, colindex: integer; var resvalue: string): boolean;
function gehtmltablehtml (atable: ihtmltable; arow: integer): ihtmlelement;
function getWebBrowserHtmlTablehtml (Doc: ihtmldocument2;
const tableIndex, rowIndex: integer; var resvalue: string): boolean;
тип
Tdxwebframecollection = class;
TdxwebelementCollection = class;
TloadState = (DOC_LOADING, DOC_COMPLETED, DOC_INVALIDET);
Tdxwebframe = class
Частный
Fframe: ihtmlwindow2;
FelementCollection: TDXWEBELEMEMENTCOLECTION;
Fwebframecollections: tdxwebframecollection;
функция getSrc: string;
function getElementCount: Integer;
Функция getWebFrameCollections: tdxWebFrameCollection;
Функция GetElementCollections: TDXWEBELEMEMENTCOLECTION;
функция getDocument: ihtmldocument2;
функция getReadState: tloadState;
Функция getisloaded: boolean;
процедура setFrame (const value: ihtmlwindow2);
функция getName: String;
публичный
Конструктор Create (iframe: ihtmlwindow2);
Разрушитель разрушения; переопределить;
Свойство кадра: ihtmlwindow2 Читать fframe write setframe;
свойство SRC: строка read getSrc;
Документ о недвижимости: ihtmldocument2 читать getDocument;
Название свойства: строка читать getName;
Рамки свойств: TDXWEBFRAMECOLLECTION Читать GetWebFrameCollections;
Property ElementCount: Integer Read GetElementCount;
Property ElementCollections: TDXWEBELEMEMENTCOLECTECTECTECTECTECTECTECTECTECTERSECOLECTION
Свойство ReadyState: TloadState Read GetReadState;
Свойство Isloaded: Boolean Read Getisloaded;
конец;
Tdxwebframecollection = class
Частный
Fframecollection: ihtmlframescollection2;
Кадр: TDXWEBFRAME;
функция GetCount: Integer;
function getFrameInterfaceByindex (index: integer): ihtmlwindow2;
function getFrameInterfaceByname (имя: String): ihtmlWindow2;
функция getFrameByindex (index: Integer): tdxwebframe;
Функция getFrameByName (name: string): tdxwebframe;
процедура setFrameCollection (const value: ihtmlframescollection2);
публичный
Конструктор Create (Acollection: ihtmlframescollection2);
Разрушитель разрушения; переопределить;
Свойство Framecollection: ihtmlframescollection2 Читать fframecollection write setframecollection;
Количество недвижимости: целое число читать GetCount;
свойство frameInterfacebyindex [index: Integer]: ihtmlwindow2 read getFrameInterfacebyindex;
свойство FrameInterfacebyName [name: string]: ihtmlwindow2 читать getFrameInterfaceByname;
свойство FrameByIndex [Index: Integer]: tdxwebframe Читать getFrameByindex;
свойство FrameByName [name: String]: tdxwebframe Read getFrameByName;
конец;
TdxwebelementCollection = class
Частный
Fcollection: ihtmlelementCollection;
FCHILDCOLECTION: TDXWEBELEMEMENTCOLECTION;
функция getCollection (index: string): tdxwebelementCollection;
функция GetCount: Integer;
function getElement (itemname: string; index: integer): ihtmlelement;
function getElementbyname (itemname: string): ihtmlelement;
function getElementbyindex (index: integer): ihtmlelement;
Процедура SetCollection (CONST Значение: ihtmlelementCollection);
публичный
Конструктор Create (Acollection: ihtmlelementCollection);
Разрушитель разрушения; переопределить;
Сбор собственности: ihtmlelementCollection Читать fcollection write setCollection;
Property ChildElementCollection [Index: String]: TDXWEBELEMEMENTCOLECTION Читать GetCollection;
Property ElementCount: Integer Read GetCount;
Элемент свойства [itemname: string; index: Integer]: ihtmlelement Read getElement;
свойство elementbyname [itemname: string]: ihtmlelement читать getelementbyname;
Свойство elementbyindex [index: Integer]: ihtmlelement читать getElementbyindex;
конец;
TlinkCollection = Class (TDXWebelementCollection)
конец;
Tdxwebtable = class;
Tdxtablecollection = class
Частный
Ftablecollection: ihtmlelementcollection;
Fdocument: ihtmldocument2;
FWEBTABLE: TDXWEBTABLE;
function getTableInterfaceByname (Aname: String): ihtmltable;
Процедура setDocument (значение: ihtmldocument2);
function getTableInterfaceByindex (index: integer): ihtmltable;
функция GetCount: Integer;
function getTableByindex (index: Integer): tdxwebtable;
function getTableByName (Aname: String): tdxwebtable;
публичный
Конструктор CREATE (DOC: IHTMLDOCUMENT2);
разрушитель разрушения; переопределить;
Свойства tableInterfacebyname [Aname: String]: ihtmltable Read getTableInterfaceByName;
Свойства TableInterfacebyindex [Index: Integer]: ihtmltable Read getTableInterfaceByindex;
Свойство TableByName [Aname: String]: tdxwebtable Read getTableByName;
Свойство TableByindex [Index: Integer]: tdxwebtable Read getTableByIndex;
Документ о свойстве: ihtmldocument2 читать fdocument write setdocument;
Количество недвижимости: целое число читать GetCount;
конец;
Tdxwebtable = class
Частный
FtableInterface: ihtmltable;
Функция getRowCount: Integer;
Процедура SettleableInterface (const value: ihtmltable);
функция getCell (Acol, Arow: Integer): String;
функция getRowColcount (RowIndex: Integer): Integer;
функция getInnerhtml: string;
функция GetInnerText: String;
функция GetCellelement (ACOL, AROW: Integer): ihtmltablecell;
публичный
Конструктор Create (Ableable: ihtmltable);
Свойства TableInterface: ihtmltable Read FtableInterface write setableInterface;
Property RowCount: Integer Read GetRowCount;
Свойная ячейка [ACOL: Integer; AROW: Integer]: String Read Getcell;
Property CellElement [ACOL: Integer; AROW: Integer]: IHTMLTABLECELL Читать GetCellelement;
свойство rowcolcount [rowindex: integer]: целое число читать getrowcolcount;
свойство Innerhtml: String Read GetInnerHtml;
Свойство Innertext: String Read GetInnerText;
конец;
Tdxwebcombobox = class
Частный
Fhtmlselect: ihtmlselectelement;
функция GetCount: Integer;
процедура setIteMindex (значение const: целое число);
функция getIteMindex: целое число;
функция getName: String;
процедура setName (const value: string);
функция getValue: String;
процедура setValue (const value: string);
процедура setCombinterface (const value: ihtmlSelectelement);
функция getItembyName (Elename: String): String;
function getItembyIndex (index: integer): string;
function getItemattribute (index: integer; attribName: string): olevariant;
публичный
конструктор Create (awebcombo: ihtmlSelectelement);
процедура добавить (ele: ihtmlelement);
Процедура вставка (Ele: ihtmlelement; индекс: целое число);
процедура удалить (индекс: целое число);
Свойство Combinterface: ihtmlSelectelement Читать fhtmlSelect write setcombinterface;
Количество недвижимости: целое число читать GetCount;
свойство itemindex: целое число чтения getIteMindex write setIteMindex;
свойство itembyindex [index: integer]: string Read getIteMbyIndex;
свойство itembyname [Elename: String]: String Read GetIteMbyName;
свойство itemattribute [index: integer; attribName: string]: olevariant Read getIteMattribute;
Имя свойства: строка чтения getName write setName;
Значение свойства: строка чтение getValue write setValue;
конец;
Выполнение
конец.
Блок реализации кода класса анализа HTMLPARSER
Код
(******************************************* *****)
(*Dexian Studio*)
(*Библиотека блок диапазона HTML*)
(**)
(*DXHTMLPARSER UNIT*)
(*Copyright (C) 2008-2010
(*Электронная почта: [email protected]: 75492895*)
(******************************************* *****)
единица dxhtmlparser;
интерфейс
использует Windows, MSHTML, ActiveX, dxhtmlelement, Forms;
тип
Tdxhtmlparser = class
Частный
Fhtmldoc: ihtmldocument2;
Fhtml: string;
Fwebtables: tdxtablecollection;
Fwebelements: TdxwebelementCollection;
Fwebcomb: tdxwebcombobox;
процедура sethtml (const value: string);
Функция getWebCombobox (Aname: String): tdxwebcombobox;
публичный
конструктор создать;
разрушитель разрушения; переопределить;
Свойство html: строка читать fhtml написать sethtml;
Свойства webtables: tdxtablecollection Read Fwebtables;
Собственность WebElements: TDXWEBELEMEMENTCOLECTECTECTECTECTECTECTECTECTECTIONGETECTERS;
Свойство WebCombobox [name: String]: tdxwebcombobox читать getWebCombobox;
конец;
Выполнение
{Tdxhtmlparser}
конструктор tdxhtmlparser.create;
Начинать
Coinitialize (NIL);
// Создать интерфейс ihtmldocument2
Cocreateinstance (class_htmldocument, nil, clsctx_inproc_server, iid_ihtmldocument2, fhtmldoc);
Assert (fhtmldoc <> nil, 'build htmldocument interface не удалось');
Fhtmldoc.set_designmode ('on');
Хотя нет (fhtmldoc.readystate = 'reflect')
Начинать
сон (1);
Application.ProcessMessages;
конец;
Fwebtables: = tdxtablecollection.create (fhtmldoc);
Fwebelements: = tdxwebelementcollection.create (nil);
Fwebcomb: = tdxwebcombobox.create (nil);
конец;
деструктор tdxhtmlparser.destroy;
Начинать
Fwebtables.free;
Fwebelements.free;
Fwebcomb.free;
Собственный;
унаследован;
конец;
function tdxhtmlparser.getwebcombobox (aname: string): tdxwebcombobox;
Начинать
Если fwebelements.collection <> nil тогда
Начинать
Fwebcomb.combinterface: = fwebelements.elementbyname [aname] как ihtmlSelectelement;
Результат: = fWebComb;
конец
иначе результат: = nil;
конец;
Процедура tdxhtmlparser.sethtml (const value: string);
Начинать
Если fhtml <> значение, тогда
Начинать
Fhtml: = value;
Fhtmldoc.body.innerhtml: = fhtml;
Fwebelements.collection: = fhtmldoc.all;
конец;
конец;
конец.