في الآونة الأخيرة ، أقوم بتقديم عمليات إرسال صفحة ويب إلى رمز مصدر صفحة الويب ، ثم الحصول على العناصر المقابلة في صفحة الويب البحث ، وجدت العديد من إصدارات Delphi من فصول HTMLParser. لذلك اعتقدت أنه إذا كان هناك متصفح على الواجهة ، فيمكننا تشغيل عناصر صفحة الويب من خلال واجهة المستند لـ WebBrowser ، وهي مريحة للغاية! ومع ذلك ، إذا لم تتم محاكاة صفحة الويب ، فيجب أن تكون هناك وسيلة لتحليل HTML مباشرة دون استخدام WebBrowser. الكائن الموجود بداخله يمكن أن يدرك HTML بعد تحليله ، والبحث عن MSDN ، ثم Google ، يعمل ، وطريقة البناء هي كما يلي:
// إنشاء واجهة ihtmldocument2
cocreateinstance (class_htmldocument ، nil ، clsctx_inproc_server ، iid_ihtmldocument2 ، fhtmldoc) ؛
بعد إنشاء الواجهة ، يمكن تحليل عناصر المستند ، وهو منعش للغاية!
دمج العمليات الفريدة الخاصة بي ، قمت بتغليف بعض عناصر صفحة الويب مثل comboBox ، الجدول ، الإطار ، وما إلى ذلك وتنفيذ htmlparser.
يتم تقديم إعلان فقط هنا ، يرجى تنزيل الرمز في النهاية
شفرة
(*************************************************** *****)
(*Dexian Studio*)
(*مكتبة فئة تشغيل صفحة الويب*)
(**)
(*وحدة DXHTMLElement*)
(*حقوق الطبع والنشر (ج) 2008-2010 لا خمول*)
(*البريد الإلكتروني: [email protected]: 75492895*)
(*************************************************** *****)
وحدة DXHTMlelement ؛
واجهة
يستخدم Windows و SysUtils و ClipBrd و MSHTML و ActiveX و Olectrls و Graphics و TypInfo ؛
{الحصول على نوع العنصر}
وظيفة IsselectElement (Eleelement: ihtmlelement): Boolean ؛
وظيفة isPwDelement (Eleelement: ihtmlelement): Boolean ؛
وظيفة iStextElement (العنصر: ihtmlelement): منطقية ؛
وظيفة iStableElement (العنصر: ihtmlelement): منطقية ؛
وظيفة isElementCollection (العنصر: ihtmlelement): منطقية ؛
وظيفة ischkelement (العنصر: ihtmlelement): منطقية ؛
وظيفة isradiobtnelement (العنصر: ihtmlelement): منطقية ؛
وظيفة isMemoElement (العنصر: ihtmlelement): منطقية ؛
وظيفة iSformElement (العنصر: ihtmlelement): منطقية ؛
وظيفة isimgelement (العنصر: ihtmlelement): منطقية ؛
وظيفة isinimgelement (العنصر: ihtmlelement): منطقية ؛
دالة islabeleMelement (العنصر: ihtmlelement): منطقية ؛
وظيفة isLinkElement (العنصر: ihtmlelement): منطقية ؛
وظيفة الوظيفة (العنصر: ihtmlelement): منطقية ؛
وظيفة iscontrolement (العنصر: ihtmlelement): منطقية ؛
وظيفة isobjectElement (العنصر: ihtmlelement): منطقية ؛
وظيفة isFrameElement (العنصر: ihtmlelement): منطقية ؛
وظيفة IsinputBtnelement (العنصر: ihtmlelement): منطقية ؛
وظيفة isinhiddenelement (العنصر: ihtmlelement): منطقية ؛
وظيفة الإصدار (العنصر: ihtmlelement): منطقية ؛
{الحصول على بيانات imgelement}
وظيفة getPicIndex (doc: ihtmldocument2 ؛ src: string ؛ alt: string): integer ؛
وظيفة getPicelement (doc: ihtmldocument2 ؛ imgname: string ؛ src: string ؛ alt: string): ihtmlimgelement ؛
وظيفة getRegCodepic (doc: ihtmldocument2 ؛ imgname: string ؛ src: alt ؛ alt: string): tpicture ؛
وظيفة getRegCodepic (DOC: IHTMLDOCUMENT2 ؛ فهرس: عدد صحيح): tpicture ؛
وظيفة getRegCodepic (doc: ihtmldocument2 ؛ العنصر: ihtmlimgelement): tpicture ؛ overload ؛
يكتب
TOBJECTFROMLRESULT = وظيفة (lresult: lresult ؛
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 (قابلة للتطبيق: ihtmltable ؛ arow ، acol: integer): ihtmlelement ؛
وظيفة gethtmltable (ADOC: ihtmldocument2 ؛ anIndex: integer): ihtmltable ؛
وظيفة getWebBrowserHtmlTableCellText (Doc: ihtmldocument2 ؛
const tableIndex ، RowIndex ، Colindex: integer ؛ var resvalue: string): Boolean ؛
وظيفة gethtmltaBlerOwHtml (قابلة للتطبيق: ihtmltable ؛ arow: integer): ihtmlelement ؛
وظيفة getWebBrowserHtmltableCellhtml (Doc: ihtmldocument2 ؛
const tableIndex ، RowIndex ، Colindex: integer ؛ var resvalue: string): Boolean ؛
وظيفة gehtmltablehtml (قابلة للآمال: ihtmltable ؛ arow: integer): ihtmlelement ؛
وظيفة getWebrowserHtmltableHtml (doc: ihtmldocument2 ؛
const tableIndex ، rowindex: integer ؛ var resvalue: string): Boolean ؛
يكتب
tdxwebframecollection = class ؛
tdxwebelementCollection = class ؛
TloadState = (doc_loading ، doc_completed ، doc_invalidate) ؛
TDXWebFrame = فئة
خاص
fframe: ihtmlwindow2 ؛
FelementCollections: TdxWebelementCollection ؛
fwebframecollections: tdxwebframecollection ؛
وظيفة getRC: سلسلة ؛
وظيفة getElementCount: عدد صحيح ؛
وظيفة getWebFramEcollections: tdxwebframecollection ؛
وظيفة getElementCollections: tdxwebelementCollection ؛
وظيفة getDocument: ihtmldocument2 ؛
وظيفة getReadState: TloadState ؛
وظيفة getIsloaded: منطقية ؛
SetFrame الإجراء (قيمة const: ihtmlwindow2) ؛
وظيفة getName: سلسلة ؛
عام
إنشاء مُنشئ (iframe: ihtmlwindow2) ؛
المدمر تدمير ؛ تجاوز ؛
إطار الخاصية: ihtmlwindow2 اقرأ fframe كتابة setFrame ؛
الخاصية SRC: سلسلة قراءة getSrc ؛
وثيقة الخصائص: ihtmldocument2 قراءة getDocument ؛
اسم الخاصية: سلسلة قراءة getName ؛
إطارات الممتلكات: tdxwebframecollection قراءة getWebFramEcollections ؛
Property ElementCount: integer Read GetElementCount ؛
Property elementCollections: tdxwebelementCollection قراءة getElementCollections ؛
Property ReadyState: TloadState Read GetReadState ؛
Property isloaded: Boolean Read GetIsloaded ؛
نهاية؛
tdxwebframecollection = فئة
خاص
fframecollection: ihtmlframescollection2 ؛
الإطار: TDXWebFrame ؛
وظيفة getCount: عدد صحيح ؛
وظيفة getFrameInterfacebyIndex (الفهرس: integer): ihtmlwindow2 ؛
وظيفة getFrameInterfacebyName (الاسم: سلسلة): ihtmlwindow2 ؛
وظيفة getFrameByIndex (الفهرس: integer): tdxwebframe ؛
وظيفة getFrameByName (الاسم: سلسلة): tdxwebframe ؛
الإجراء setFramEcollection (قيمة const: ihtmlframescollection2) ؛
عام
إنشاء مُنشئ (Acollection: ihtmlframescollection2) ؛
المدمر تدمير ؛ تجاوز ؛
Property FrameCollection: ihtmlframescollection2 قراءة fframecollection كتابة setframecollection ؛
عدد الممتلكات: عدد صحيح قراءة getCount ؛
Property FrameInterfaceByIndex [الفهرس: integer]: ihtmlwindow2 قراءة getFrameInterfaceByIndex ؛
Property FrameInterfacebyName [name: string]: ihtmlwindow2 read getFrameInterfacebyName ؛
Property FrameByIndex [الفهرس: عدد صحيح]: TDXWebFrame قراءة getFrameByIndex ؛
Property FrameByName [name: String]: TDXWebFrame read getFrameByName ؛
نهاية؛
tdxwebelementCollection = فئة
خاص
fcollection: ihtmlelementCollection ؛
fchildCollection: tdxwebelementCollection ؛
وظيفة getCollection (الفهرس: السلسلة): tdxwebelementCollection ؛
وظيفة getCount: عدد صحيح ؛
وظيفة getElement (itemName: string ؛ index: integer): ihtmlelement ؛
وظيفة getElementByName (itemName: String): ihtmlelement ؛
وظيفة getElementByIndex (الفهرس: عدد صحيح): ihtmlelement ؛
الإجراء setCollection (قيمة const: ihtmlelementCollection) ؛
عام
إنشاء مُنشئ (Acollection: ihtmlelementCollection) ؛
المدمر تدمير ؛ تجاوز ؛
جمع العقارات: ihtmlelementCollection قراءة fcollection اكتب setCollection ؛
Property ChildElementCollection [INDEX: String]: TDXWEBELEMBEMANCELECTION Read GetCollection ؛
Property ElementCount: integer read getCount ؛
عنصر الخصائص [itemName: String ؛ index: integer]: ihtmlelement قراءة getElement ؛
Property elementByName [itemName: String]: ihtmlelement قراءة getElementByName ؛
property elementByIndex [index: integer]: ihtmlelement read getElementByIndex ؛
نهاية؛
tlinkcollection = فئة (tdxwebelementCollection)
نهاية؛
tdxwebtable = class ؛
tdxtableCollection = فئة
خاص
ftableCollection: ihtmlelementCollection ؛
fdocument: ihtmldocument2 ؛
fwebtable: tdxwebtable ؛
وظيفة getTableInterfaceByName (aname: string): ihtmltable ؛
الإجراء setDocument (القيمة: ihtmldocument2) ؛
وظيفة getTableInterfaceByIndex (الفهرس: عدد صحيح): ihtmltable ؛
وظيفة getCount: عدد صحيح ؛
وظيفة getTableByIndex (الفهرس: عدد صحيح): tdxwebtable ؛
وظيفة getTableByName (aname: string): tdxwebbtable ؛
عام
إنشاء مُنشئ (doc: ihtmldocument2) ؛
المدمر تدمير ؛ تجاوز ؛
Property tableInterfacebyName [aname: string]: ihtmltable read getTableNiteLitfaceByName ؛
Property TableInterfacebyIndex [الفهرس: integer]: ihtmltable read getTableInterfacebyIndex ؛
Property TableByName [aname: string]: tdxwebtable read getTableByName ؛
Property TableByIndex [الفهرس: عدد صحيح]: TDXWEBTable read getTableByIndex ؛
وثيقة الخصائص: ihtmldocument2 قراءة fdocument اكتب setDocument ؛
عدد الممتلكات: عدد صحيح قراءة getCount ؛
نهاية؛
TDXWEBTable = فئة
خاص
ftableInterface: ihtmltable ؛
وظيفة getRowCount: عدد صحيح ؛
الإجراءات المستقرة (قيمة const: ihtmltable) ؛
وظيفة getCell (ACOL ، AROW: عدد صحيح): سلسلة ؛
وظيفة getRowColcount (RowIndex: integer): عدد صحيح ؛
وظيفة getinnerhtml: سلسلة.
وظيفة getInnerText: سلسلة ؛
وظيفة getCellElement (ACOL ، AROW: عدد صحيح): IHTMLTABLECELL ؛
عام
إنشاء مُنشئ (قابل للتطبيق: ihtmltable) ؛
Property TableInterface: ihtmltable قراءة ftableInterface اكتب settableInterface ؛
property rowcount: integer read getRowCount ؛
خلية الخاصية [Acol: integer ؛ arow: integer]: string read getCell ؛
Cellelement الخاصية [Acol: integer ؛ arow: integer]: ihtmltablecell قراءة getCellElement ؛
property rowcolcount [rowindex: integer]: integer read getRowColcount ؛
Property Innerhtml: String Read GetInnerHtml ؛
خاصية innertext: سلسلة قراءة getInnerText ؛
نهاية؛
tdxwebcombobox = فئة
خاص
fhtmlselect: ihtmlSelectElement ؛
وظيفة getCount: عدد صحيح ؛
الإجراء setItemIndex (قيمة const: عدد صحيح) ؛
وظيفة getItemIndex: عدد صحيح ؛
وظيفة getName: سلسلة ؛
الإجراء setName (قيمة const: سلسلة) ؛
وظيفة getValue: سلسلة.
الإجراء setValue (قيمة const: سلسلة) ؛
الإجراء setCombinterface (قيمة const: IHTMLSelectElement) ؛
وظيفة getItemByName (elename: String): String ؛
وظيفة getItemByIndex (الفهرس: عدد صحيح): سلسلة ؛
وظيفة getItemAttribute (الفهرس: integer ؛ attribname: سلسلة): Olevariant ؛
عام
إنشاء مُنشئ (awebcombo: ihtmlselectelement) ؛
الإجراء إضافة (ELE: ihtmlelement) ؛
الإجراء إدراج (ELE: ihtmlelement ؛ الفهرس: عدد صحيح) ؛
الإجراء إزالة (الفهرس: عدد صحيح) ؛
property combinterface: IHTMLECLECTELEMENT اقرأ fHTMLSELECT كتابة setCombinterface ؛
عدد الممتلكات: عدد صحيح قراءة getCount ؛
Property itemIndex: integer read getItemIndex write setItemIndex ؛
property itembyIndex [index: integer]: string read getItemByIndex ؛
Property itemByName [elename: string]: string read getItemByName ؛
Property itemAttRibute [index: integer ؛ attribname: string]: olvariant read getItemAttribute ؛
اسم الخاصية: سلسلة قراءة getName اكتب setName ؛
قيمة الخاصية: سلسلة قراءة getValue اكتب setValue ؛
نهاية؛
تطبيق
نهاية.
وحدة تنفيذ التعليمات البرمجية لفئة تحليل HTMLParser
شفرة
(*************************************************** *****)
(*Dexian Studio*)
(*مكتبة وحدة التحليل HTML*)
(**)
(*DXHTMLParser Unit*)
(*حقوق الطبع والنشر (ج) 2008-2010 لا خمول*)
(*البريد الإلكتروني: [email protected]: 75492895*)
(*************************************************** *****)
وحدة DXHTMLPARSER ؛
واجهة
يستخدم Windows و MSHTML و ActiveX و DXHTMlelement و Forms ؛
يكتب
tdxhtmlparser = فئة
خاص
fhtmldoc: ihtmldocument2 ؛
FHTML: سلسلة ؛
fwebtles: tdxtableCollection ؛
fwebelements: tdxwebelementCollection ؛
fwebcomb: tdxwebcombobox ؛
الإجراء sethtml (قيمة const: سلسلة) ؛
وظيفة getWebCombobox (Aname: String): tdxwebcombobox ؛
عام
إنشاء مُنشئ ؛
المدمر تدمير ؛ تجاوز ؛
Property HTML: سلسلة قراءة fhtml اكتب sethtml ؛
Property WebTables: TDXTABLECollection اقرأ FWEBTABLES ؛
خاصية الويب الخاصة بالممتلكات: tdxwebelementCollection اقرأ fwebelements ؛
Property WebCombobox [الاسم: سلسلة]: tdxwebcombobox قراءة getWebcombobox ؛
نهاية؛
تطبيق
{tdxhtmlparser}
مُنشئ tdxhtmlparser.create ؛
يبدأ
coinitialize (NIL) ؛
// إنشاء واجهة ihtmldocument2
cocreateinstance (class_htmldocument ، nil ، clsctx_inproc_server ، iid_ihtmldocument2 ، fhtmldoc) ؛
تأكيد (FHTMLDOC <> NIL ، 'Build Htmldocument Interface فشل') ؛
FHTMLDOC.SET_DESIGNMODE ('ON') ؛
بينما لا (fhtmldoc.readystate = 'complete') تفعل
يبدأ
النوم (1) ؛
Application.ProcessMessages ؛
نهاية؛
FWEBTABLES: = tdxtableCollection.create (FHTMLDOC) ؛
fwebelements: = tdxwebelementCollection.create (nil) ؛
fwebcomb: = tdxwebcombobox.create (nil) ؛
نهاية؛
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 ؛
نهاية
النتيجة الأخرى: = لا شيء ؛
نهاية؛
الإجراء tdxhtmlparser.sethtml (قيمة const: سلسلة) ؛
يبدأ
إذا كانت قيمة FHTML <>
يبدأ
FHTML: = القيمة ؛
fhtmldoc.body.innerhtml: = fhtml ؛
fwebelements.collection: = fhtmldoc.all ؛
نهاية؛
نهاية؛
نهاية.