เมื่อเร็ว ๆ นี้ฉันมักจะจำลองการส่งหน้าเว็บและกลับไปที่ซอร์สโค้ดหน้าเว็บแล้วรับองค์ประกอบที่เกี่ยวข้องในหน้าเว็บ การค้นหาฉันพบคลาส HTMLPARSER หลายรุ่น Delphi ดังนั้นฉันคิดว่าหากมีเบราว์เซอร์ในอินเทอร์เฟซเราสามารถใช้งานองค์ประกอบหน้าเว็บผ่านอินเทอร์เฟซเอกสารของ WebBrowser ซึ่งสะดวกมาก! อย่างไรก็ตามหากคุณจำลองการส่งเว็บเพจ WebBrowser ไม่จำเป็นต้องปรากฏตัวในอินเทอร์เฟซ วัตถุภายในสามารถตระหนักถึง HTML หลังจากแยกวิเคราะห์ค้นหา MSDN จากนั้น Google มันใช้งานได้และวิธีการก่อสร้างมีดังนี้:
// สร้างอินเทอร์เฟซ ihtmldocument2
cocreateinstance (class_htmldocument, nil, clsctx_inproc_server, iid_ihtmldocument2, fhtmldoc);
หลังจากสร้างอินเทอร์เฟซองค์ประกอบเอกสารสามารถแยกวิเคราะห์ได้ซึ่งสดชื่นมาก!
การรวมการดำเนินงานที่ไม่ซ้ำกันของฉันเองฉันได้ห่อหุ้มองค์ประกอบบางส่วนของเว็บเพจเช่น ComboBox, ตาราง, เฟรม, ฯลฯ และใช้งาน HTMLPARSER
มีการประกาศเท่านั้นที่นี่โปรดดาวน์โหลดรหัสในตอนท้าย
รหัส
(*********************************************************** *****)
(*DEXIAN Studio*)
(*ไลบรารีคลาสการดำเนินงานของหน้าเว็บหน้า*)
-
(*หน่วย dxhtmlelement*)
(*ลิขสิทธิ์ (c) 2008-2010 ไม่มีการใช้งานไม่ได้*)
(*อีเมล: [email protected]: 75492895*)
(*********************************************************** *****)
หน่วย dxhtmlelement;
ส่วนต่อประสาน
ใช้ windows, sysutils, clipbrd, mshtml, activex, olectls, กราฟิก, typinfo;
{รับประเภทองค์ประกอบ}
ฟังก์ชั่น issElectElement (eleelement: ihtmlelement): บูลีน;
ฟังก์ชั่น ispwdelement (eleelement: ihtmlelement): บูลีน;
ฟังก์ชั่น iStextElement (องค์ประกอบ: ihtmlelement): บูลีน;
ฟังก์ชั่น iStableElement (องค์ประกอบ: ihtmlelement): บูลีน;
ฟังก์ชั่น isElementCollection (องค์ประกอบ: ihtmlelement): บูลีน;
ฟังก์ชั่น ischkelement (องค์ประกอบ: ihtmlelement): บูลีน;
ฟังก์ชั่น ISRADIOBTNELEMENT (องค์ประกอบ: IHTMLELEMENT): บูลีน;
ฟังก์ชั่น ismemoelement (องค์ประกอบ: ihtmlelement): บูลีน;
ฟังก์ชัน ISFormElement (องค์ประกอบ: ihtmlelement): บูลีน;
ฟังก์ชั่น isimgelement (องค์ประกอบ: ihtmlelement): บูลีน;
ฟังก์ชั่น ISINIMGELEMENT (องค์ประกอบ: IHTMLELEMENT): บูลีน;
ฟังก์ชั่น ISLABELELEMENT (องค์ประกอบ: IHTMLELEMENT): บูลีน;
ฟังก์ชั่น iSlinkElement (องค์ประกอบ: ihtmlelement): บูลีน;
ฟังก์ชั่น iSlistelement (องค์ประกอบ: ihtmlelement): บูลีน;
ฟังก์ชั่น isControlelement (องค์ประกอบ: 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: String; SRC: String; ALT: String): TPICTURE;
ฟังก์ชั่น getRegCodePic (DOC: IHTMLDOCUMENT2; ดัชนี: จำนวนเต็ม): TPICTURE;
ฟังก์ชั่น getRegCodePic (DOC: ihtmldocument2; องค์ประกอบ: ihtmlimgelement): tpicture; overload;
พิมพ์
TobjectFromLresult = ฟังก์ชั่น (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);
ฟังก์ชั่น getElementType (องค์ประกอบ: ihtmlelement): telementtype;
ฟังก์ชั่น getElementTypename (องค์ประกอบ: ihtmlelement): สตริง;
ฟังก์ชั่น gethtmltablecell (atable: ihtmltable; arow, acol: จำนวนเต็ม): ihtmlelement;
ฟังก์ชั่น gethtmltable (ADOC: ihtmldocument2; aindex: จำนวนเต็ม): ihtmltable;
ฟังก์ชั่น getWebBrowserHtmlTableCellText (DOC: IHTMLDOCUMENT2;
Const TableIndex, RowIndex, Colindex: Integer; VAR Resvalue: String): บูลีน;
ฟังก์ชั่น gethtmltablerowhtml (atable: ihtmltable; arow: จำนวนเต็ม): ihtmlelement;
ฟังก์ชั่น getwebbrowserhtmltablecellhtml (เอกสาร: ihtmldocument2;
Const TableIndex, RowIndex, Colindex: Integer; VAR Resvalue: String): บูลีน;
ฟังก์ชั่น gehtmltablehtml (atable: ihtmltable; arow: จำนวนเต็ม): ihtmlelement;
ฟังก์ชั่น getwebbrowserhtmltablehtml (เอกสาร: ihtmldocument2;
Const TableIndex, RowIndex: Integer; VAR Resvalue: String): บูลีน;
พิมพ์
tdxwebframecollection = คลาส;
tdxwebelementCollection = คลาส;
tloadState = (doc_loading, doc_completed, doc_invalidate);
tdxwebframe = คลาส
ส่วนตัว
fframe: ihtmlwindow2;
FELEMENTCOLLESTIONS: TDXWEBELEMENTCOLLECTION;
FWEBFRAMECOLLESTIONS: TDXWEBFRAMECOLLECTION;
ฟังก์ชั่น getSrc: สตริง;
ฟังก์ชั่น getElementCount: จำนวนเต็ม;
ฟังก์ชั่น getwebframecollections: tdxwebframecollection;
ฟังก์ชั่น GetElementCollections: TDXWEBELEMENTCOLLECTION;
ฟังก์ชั่น getDocument: ihtmldocument2;
ฟังก์ชั่น getReadState: tloadState;
ฟังก์ชั่น getisloaded: บูลีน;
ขั้นตอน setFrame (ค่า const: ihtmlwindow2);
ฟังก์ชั่น getName: สตริง;
สาธารณะ
ตัวสร้างสร้าง (iframe: ihtmlwindow2);
Destructor ทำลาย; แทนที่;
เฟรมคุณสมบัติ: ihtmlWindow2 อ่าน fframe เขียน setFrame;
คุณสมบัติ SRC: สตริงอ่าน getSrc;
เอกสารคุณสมบัติ: ihtmldocument2 อ่าน getDocument;
ชื่อคุณสมบัติ: สตริงอ่าน getName;
เฟรมคุณสมบัติ: tdxwebframecollection อ่าน getwebframecollections;
Property ElementCount: Integer Read GetElementCount;
ElementCollections Property: TDXWEBELEMENTCOLLECTION อ่าน GetElementCollections;
คุณสมบัติ ReadyState: TloadState อ่าน getReadState;
Property Isloaded: บูลีนอ่าน getisloaded;
จบ;
tdxwebframecollection = คลาส
ส่วนตัว
fframecollection: ihtmlframescollection2;
เฟรม: tdxwebframe;
ฟังก์ชั่น getCount: จำนวนเต็ม;
ฟังก์ชั่น getFrameInterfacebyIndex (ดัชนี: จำนวนเต็ม): ihtmlwindow2;
ฟังก์ชั่น getFrameInterfacebyName (ชื่อ: สตริง): ihtmlWindow2;
ฟังก์ชั่น getFrameByIndex (ดัชนี: จำนวนเต็ม): tdxwebframe;
ฟังก์ชั่น getFrameByName (ชื่อ: สตริง): tdxwebframe;
ขั้นตอน setFrameCollection (ค่า const: ihtmlframescollection2);
สาธารณะ
ตัวสร้างสร้าง (acollection: ihtmlframescollection2);
Destructor ทำลาย; แทนที่;
คุณสมบัติ framecollection: ihtmlframescollection2 อ่าน fframecollection เขียน setframecollection;
จำนวนทรัพย์สิน: จำนวนเต็มอ่าน getCount;
คุณสมบัติ FrameInterfacebyIndex [ดัชนี: จำนวนเต็ม]: ihtmlWindow2 อ่าน getFrameInterfacebyIndex;
คุณสมบัติ frameInterfacebyName [ชื่อ: สตริง]: ihtmlWindow2 อ่าน getFrameInterfacebyName;
คุณสมบัติ FrameByIndex [ดัชนี: จำนวนเต็ม]: tdxwebframe อ่าน getFramebyIndex;
Property FrameByName [ชื่อ: String]: TDXWEBFRAME อ่าน getFrameByName;
จบ;
tdxwebelementCollection = คลาส
ส่วนตัว
fcollection: ihtmlelementcollection;
FCHILDCOLLECTION: TDXWEBELEMENTCOLLECTION;
ฟังก์ชั่น getCollection (ดัชนี: สตริง): tdxwebelementCollection;
ฟังก์ชั่น getCount: จำนวนเต็ม;
ฟังก์ชัน GetElement (itemName: string; index: จำนวนเต็ม): ihtmlelement;
ฟังก์ชั่น getElementByName (itemName: string): ihtmlelement;
ฟังก์ชั่น getElementByIndex (ดัชนี: จำนวนเต็ม): ihtmlelement;
ขั้นตอน setCollection (ค่า const: ihtmlelementCollection);
สาธารณะ
ตัวสร้างสร้าง (acollection: ihtmlelementcollection);
Destructor ทำลาย; แทนที่;
คอลเลกชันคุณสมบัติ: ihtmlelementCollection อ่าน fcollection เขียน setcollection;
Property ChildElementCollection [ดัชนี: String]: tdxwebelementCollection อ่าน getCollection;
Property ElementCount: จำนวนเต็มอ่าน getCount;
องค์ประกอบคุณสมบัติ [itemName: String; INDEX: Integer]: IHTMLELEMENT Read GetElement;
Property ElementByName [itemName: string]: ihtmlelement อ่าน getElementByName;
Property ElementByIndex [ดัชนี: จำนวนเต็ม]: ihtmlelement อ่าน getElementByIndex;
จบ;
tlinkCollection = คลาส (tdxwebelementCollection)
จบ;
tdxwebtable = คลาส;
tdxTableCollection = คลาส
ส่วนตัว
ftableCollection: ihtmlelementCollection;
fdocument: ihtmldocument2;
fwebtable: tdxwebtable;
ฟังก์ชั่น getTableInterfacebyName (ANAME: String): ihtmlTable;
ขั้นตอน setDocument (ค่า: ihtmldocument2);
ฟังก์ชั่น getTableInterfacebyIndex (ดัชนี: จำนวนเต็ม): ihtmltable;
ฟังก์ชั่น getCount: จำนวนเต็ม;
ฟังก์ชั่น getTableByIndex (ดัชนี: จำนวนเต็ม): tdxwebtable;
ฟังก์ชั่น getTableByName (ANAME: String): tdxwebtable;
สาธารณะ
ตัวสร้างสร้าง (DOC: IHTMLDOCUMENT2);
Destructor ทำลาย; แทนที่;
Property TableInterfacebyName [aname: string]: ihtmlTable อ่าน getTableInterfacebyName;
Property TableInterfacebyIndex [ดัชนี: จำนวนเต็ม]: ihtmltable อ่าน getTableInterfacebyIndex;
Property TableByName [ANAME: String]: tdxwebtable อ่าน getTableByName;
Property TableByIndex [ดัชนี: จำนวนเต็ม]: tdxwebtable อ่าน getTableByIndex;
เอกสารคุณสมบัติ: ihtmldocument2 อ่าน fdocument เขียน setDocument;
จำนวนทรัพย์สิน: จำนวนเต็มอ่าน getCount;
จบ;
tdxwebtable = คลาส
ส่วนตัว
ftableInterface: ihtmltable;
ฟังก์ชั่น getRowCount: จำนวนเต็ม;
PROCIDURE SETETALEINTIONFACE (ค่า const: ihtmlTable);
ฟังก์ชั่น getCell (ACOL, AROW: Integer): String;
ฟังก์ชั่น getRowColCount (rowindex: จำนวนเต็ม): จำนวนเต็ม;
ฟังก์ชั่น getinnerhtml: สตริง;
ฟังก์ชั่น getInnerText: สตริง;
ฟังก์ชั่น getCelleLelement (ACOL, AROW: Integer): IHTMLTABLECELL;
สาธารณะ
ตัวสร้างสร้าง (atable: ihtmltable);
Property TableInterface: ihtmltable อ่าน ftableInterface เขียน settableInterface;
Property Rowcount: Integer อ่าน getrowcount;
เซลล์คุณสมบัติ [ACOL: จำนวนเต็ม; AROW: Integer]: String Read GetCell;
Property Cellelement [ACOL: Integer; AROW: Integer]: IHTMLTABLECELL อ่าน getCelleLement;
คุณสมบัติ rowcolcount [rowindex: จำนวนเต็ม]: จำนวนเต็มอ่าน getrowcolcount;
คุณสมบัติ innerhtml: สตริงอ่าน getinnerhtml;
คุณสมบัติ innertext: สตริงอ่าน getinnerText;
จบ;
tdxwebcombobox = คลาส
ส่วนตัว
fhtmlselect: ihtmlselectelement;
ฟังก์ชั่น getCount: จำนวนเต็ม;
ขั้นตอน setItemIndex (ค่า const: จำนวนเต็ม);
ฟังก์ชั่น getItemIndex: จำนวนเต็ม;
ฟังก์ชั่น getName: สตริง;
SetName ขั้นตอน (ค่า const: String);
ฟังก์ชั่น getValue: สตริง;
ขั้นตอน setValue (ค่า const: สตริง);
ขั้นตอน setcombinterface (ค่า const: ihtmlselectelement);
ฟังก์ชั่น getItemByName (elename: string): string;
ฟังก์ชั่น getItembyIndex (ดัชนี: จำนวนเต็ม): สตริง;
ฟังก์ชั่น getItEmattribute (ดัชนี: จำนวนเต็ม; attribname: String): levariant;
สาธารณะ
ตัวสร้างสร้าง (Awebcombo: ihtmlselectelement);
ขั้นตอนเพิ่ม (ele: ihtmlelement);
ขั้นตอนการแทรก (ele: ihtmlelement; ดัชนี: จำนวนเต็ม);
ขั้นตอนการลบ (ดัชนี: จำนวนเต็ม);
คุณสมบัติ Combinterface: ihtmlselectelement อ่าน fhtmlselect เขียน setcombinterface;
จำนวนทรัพย์สิน: จำนวนเต็มอ่าน getCount;
Property Item Inindex: Integer อ่าน getItemindex เขียน setItemindex;
Property itembyIndex [ดัชนี: จำนวนเต็ม]: สตริงอ่าน getItembyIndex;
Property itemByName [elename: string]: string read getItembyName;
Property ItemAttribute [ดัชนี: จำนวนเต็ม; attribname: String]: levariant read getItemattribute;
ชื่อคุณสมบัติ: สตริงอ่าน getName 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: String;
fwebtables: tdxtableCollection;
fwebelements: tdxwebelementcollection;
FWEBCOMB: TDXWEBCOMBOBOX;
ขั้นตอน sethtml (ค่า const: สตริง);
ฟังก์ชั่น getwebcombobox (aname: string): tdxwebcombobox;
สาธารณะ
ตัวสร้างสร้าง;
Destructor ทำลาย; แทนที่;
คุณสมบัติ html: สตริงอ่าน fhtml เขียน sethtml;
คุณสมบัติ webtables: tdxtableCollection อ่าน fwebtables;
WebElements คุณสมบัติ: tdxwebelementcollection อ่าน fwebelements;
คุณสมบัติ webcombobox [ชื่อ: สตริง]: tdxwebcombobox อ่าน getwebcombobox;
จบ;
การดำเนินการ
{tdxhtmlparser}
ตัวสร้าง tdxhtmlparser.create;
เริ่ม
Coinitialize (ไม่มี);
// สร้างอินเทอร์เฟซ ihtmldocument2
cocreateinstance (class_htmldocument, nil, clsctx_inproc_server, iid_ihtmldocument2, fhtmldoc);
ยืนยัน (fhtmldoc <> nil, 'สร้างอินเตอร์เฟส htmldocument ล้มเหลว');
fhtmldoc.set_designmode ('on');
ในขณะที่ไม่ใช่ (fhtmldoc.readystate = 'เสร็จสมบูรณ์') ทำ
เริ่ม
นอนหลับ (1);
Application.processMessages;
จบ;
fwebtables: = tdxtableCollection.create (fhtmldoc);
fwebelements: = tdxwebelementcollection.create (ไม่มี);
fwebcomb: = tdxwebcombobox.create (ไม่มี);
จบ;
destructor tdxhtmlparser.destroy;
เริ่ม
fwebtables.free;
fwebelements.free;
fwebcomb.free;
couninitialize;
สืบทอด;
จบ;
ฟังก์ชั่น tdxhtmlparser.getwebcombobox (aname: string): tdxwebcombobox;
เริ่ม
ถ้า fwebelements.collection <> nil แล้ว
เริ่ม
fwebcomb.combinterface: = fwebelements.elementByName [aname] เป็น ihtmlselectelement;
ผลลัพธ์: = fwebcomb;
จบ
ผลลัพธ์อื่น: = nil;
จบ;
ขั้นตอน tdxhtmlparser.sethtml (ค่า const: สตริง);
เริ่ม
ถ้า fhtml <> ค่าแล้ว
เริ่ม
fhtml: = ค่า;
fhtmldoc.body.innerhtml: = fhtml;
fwebelements.collection: = fhtmldoc.all;
จบ;
จบ;
จบ.