ה TWebBrowser בקרת דלפי מספקת גישה לפונקציונליות של דפדפן האינטרנט מיישומי הדלפי שלך - כדי לאפשר לך ליצור רשת אינטרנט מותאמת אישית יישום גלישה או להוסיף יכולות גלישה באינטרנט, קבצים ורשתות, צפיות במסמכים והורדת נתונים יישומים.
טפסים ברשת
א טופס אינטרנט או א טופס בדף אינטרנט מאפשר למבקר בדפי אינטרנט להזין נתונים שנשלחים, לרוב, לשרת לצורך עיבודם.
טופס האינטרנט הפשוט ביותר יכול להיות מורכב מאחד אלמנט קלט (ערוך בקרה) ו- שלח כפתור. רוב מנועי החיפוש באינטרנט (כמו גוגל) משתמשים בטופס אינטרנט שכזה כדי לאפשר לך לחפש באינטרנט.
טפסי אינטרנט מורכבים יותר יכללו רשימות נפתחות, תיבות סימון, לחצני אפשרויות וכו '. טופס אינטרנט דומה מאוד לטופס חלונות רגיל עם בקרות קלט ובחירת טקסט.
כל טופס יכלול כפתור - כפתור הגשה - שמורה לדפדפן לנקוט בפעולה בטופס האינטרנט (בדרך כלל לשלוח אותו לשרת אינטרנט לצורך עיבודו).
מאכלס טפסים ברשת באופן פרוגרמטי
אם ביישום שולחן העבודה שלך אתה משתמש ב- TWebBrowser כדי להציג דפי אינטרנט, אתה יכול לשלוט באופן תכנותי על טפסי אינטרנט: לתפעל, לשנות, למלא, לאכלס שדות בטופס אינטרנט ולהגיש אותו.
להלן אוסף של פונקציות דלפי מותאמות אישית בהן תוכלו להשתמש כדי לרשום את כל טפסי האינטרנט בדף אינטרנט, כדי לאחזר אלמנטים קלט, לאכלס שדות באופן פרוגרמטי ולשלוח סוף סוף את הטופס.
כדי לעקוב אחר הדוגמאות ביתר קלות, נניח שיש פקד TWebBrowser בשם "WebBrowser1" בטופס Delphi (Windows רגיל).
הערה: עליך להוסיף mshtml לסעיף השימושים שלך על מנת לקבוע את השיטות המפורטות כאן.
ציין שמות טפסים ברשת, קבל טופס אינטרנט לפי אינדקס
בדף אינטרנט לרוב יש רק טופס אינטרנט אחד, אך בחלק מדפי האינטרנט עשוי להיות יותר מטופס אינטרנט אחד. כך תוכלו לקבל את שמות כל טופסי האינטרנט בדף אינטרנט:
פונקציה שמות WebForm (const מסמך: IHTMLDocument2): TStringList; var טפסים: IHTMLElementCollection; טופס: IHTMLFormElement; idx: מספר שלם; התחל צורות: = מסמך. טפסים כמו IHTMLElement Collection; תוצאה: = TStringList. צור; ל idx: = 0 ל -1 + forms.length לעשותהתחל טופס: = forms.item (idx, 0) בתור IHTMLFormElement; תוצאה. הוסף (form.name); סוף; סוף;
שימוש פשוט להצגת רשימת שמות טפסים ברשת ב- TMemo:
var צורות: TStringList; התחל טפסים: = WebFormNames (WebBrowser1.Document כפי ש IHTMLDocument2); נסה memo1.Lines. הקצה (טפסים); סוף סוף צורות. חינם; סוף; סוף;
הנה כיצד לעשות זאת קבל מופע של טופס אינטרנט לפי אינדקס. עבור עמוד טופס יחיד האינדקס יהיה 0 (אפס).
פונקציה WebFormGet (const formNumber: מספר שלם; const מסמך: IHTMLDocument2): IHTMLFormElement; var טפסים: IHTMLElementCollection; התחל צורות: = מסמך. טפסים כפי ש איסוף IHTMLElement; תוצאה: = צורות. פריט (formNumber, '') כפי ש IHTMLFormElement. סוף;
ברגע שיש לך את טופס האינטרנט, אתה יכול רשום את כל רכיבי קלט ה- HTML בשמם, אתה יכול קבל או קבע את הערך עבור כל אחד מהשדותולבסוף, אתה יכול הגש את טופס האינטרנט.
דפי אינטרנט יכולים לארח טפסי אינטרנט עם אלמנטים של קלט כמו תיבות עריכה ורשימות נפתחות בהן תוכלו לשלוט ולתפעל באופן תכנותי מקוד דלפי.
ברגע שיש לך את טופס האינטרנט, אתה יכול רשום את כל רכיבי קלט ה- HTML בשמם:
פונקציה WebFormFields (const מסמך: IHTMLDocument2; const שם טופס: מחרוזת): TStringList; var טופס: IHTMLFormElement; תחום: IHTMLElement; fName: מחרוזת; idx: מספר שלם; התחל form: = WebFormGet (0, WebBrowser1.Document כפי ש IHTMLDocument2); תוצאה: = TStringList. צור; ל idx: = 0 ל -1 + form.length לעשות התחל שדה: = form.item (idx, '') כ- IHTMLElement; אם שדה = אפסי אז המשך; fName: = field.id; אם field.tagName = 'INPUT' לאחר מכן fName: = (שדה כפי ש IHTMLInputElement) .name; אם field.tagName = 'בחר' לאחר מכן fName: = (שדה כפי ש IHTMLSelectElement) .name; אם field.tagName = 'TEXTAREA' לאחר מכן fName: = (שדה כפי ש IHTMLTextAreaElement) .name; תוצאה. הוסף (fName); סוף; סוף;
כשאתה יודע את שמות השדות בטופס אינטרנט, אתה יכול לתכנת קבל את הערך עבור שדה HTML יחיד:
פונקציה WebFormFieldValue ( const מסמך: IHTMLDocument2; const formNumber: מספר שלם; const שם שדה: מחרוזת): מחרוזת; var טופס: IHTMLFormElement; תחום: IHTMLElement; התחל form: = WebFormGet (formNumber, WebBrowser1.Document כפי ש IHTMLDocument2); שדה: = טופס. פריט (שדה שם, '') בתור IHTMLElement; אם שדה = אפסי אז יציאה; אם field.tagName = 'INPUT' לאחר מכן תוצאה: = (שדה כפי ש IHTMLInputElement). ערך; אם field.tagName = 'בחר' לאחר מכן תוצאה: = (שדה כפי ש IHTMLSelectElement). ערך; אם field.tagName = 'TEXTAREA' לאחר מכן תוצאה: = (שדה כפי ש IHTMLTextAreaElement). ערך; סוף;
דוגמה לשימוש כדי לקבל את הערך של שדה קלט בשם "URL":
const FIELDNAME = 'url'; var doc: IHTMLDocument2; שדה ערך: מחרוזת; התחל doc: = WebBrowser1.Document כפי ש IHTMLDocument2; fieldValue: = WebFormFieldValue (doc, 0, FIELDNAME); memo1.Lines. הוסף ('שדה: "URL", ערך:' + שדה ערך);סוף;
לרעיון כולו אין שום ערך אם לא תצליח מלא אלמנטים של טופס אינטרנט:
תהליך WebFormSetFieldValue (const מסמך: IHTMLDocument2; const formNumber: מספר שלם; const שדה שם, חדש ערך: מחרוזת); var טופס: IHTMLFormElement; תחום: IHTMLElement; התחל form: = WebFormGet (formNumber, WebBrowser1.Document כפי ש IHTMLDocument2); שדה: = טופס. פריט (שדה שם, '') כפי ש IHTMLElement; אם שדה = אפסי אז יציאה; אם field.tagName = 'INPUT' לאחר מכן (שדה כפי ש IHTMLInputElement) .value: = newValue; אם field.tagName = 'בחר' לאחר מכן (שדה כפי ש IHTMLSelectElement): = newValue; אם field.tagName = 'TEXTAREA' לאחר מכן (שדה כפי ש IHTMLTextAreaElement): = newValue; סוף;
הגש טופס אינטרנט
לבסוף, כשמניפולציות של כל השדות, סביר להניח שתרצה להגיש את טופס האינטרנט מקוד דלפי. הנה כיצד:
הליך WebFormSubmit ( const מסמך: IHTMLDocument2; const formNumber: מספר שלם); var טופס: IHTMLFormElement; תחום: IHTMLElement; התחל form: = WebFormGet (formNumber, WebBrowser1.Document כפי ש IHTMLDocument2); form.smit; סוף;
לא כל טפסי האינטרנט הם "ראש פתוח"
טפסי אינטרנט מסוימים עשויים לארח תמונת captcha כדי למנוע מניפולציה של דפי אינטרנט באופן תכנותי.
ייתכן וטפסים מסוימים באינטרנט לא יוגשו כשתלחץ על כפתור ההגשה. טפסים מסוימים באינטרנט מבצעים JavaScript או פרוצדורה אחרת מבוצעת על ידי אירוע "המשלח" של טופס האינטרנט.
בכל מקרה, ניתן לשלוט על דפי אינטרנט באופן תכנותי, השאלה היחידה היא "כמה רחוק אתה מוכן להגיע?"