Sollen z.B. Edit Felder in einem Web-Formular ausgefüllt werden, ist es notwendig auf die ActiveX Schnittstelle des Webbrowser zu zugreifen. Die hier vorgestellte Unit stellt als Beispiele das Lesen und Schreiben von Editfeldern, das Lesen und Schreiben von Check Boxen, sowie das Betätigen von Buttons vor.
Die Routinen funktionieren auch, wenn eine Seite aus mehreren Frames besteht. Allerding mit einer Einschränkung: Kommt ein Feldname in mehreren Frames vor, wird immer der aus dem ersten Frame verwendet. Dies kann insbesondere beim "submit" - Button vorkommen. Es sollte allerdings kein Problem sein für diesen Fall die Routinen zu anzupassen.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241:
| unit WbCtrl;
interface
uses Windows, Classes, Forms, ShDocVw, WinInet, ActiveX;
function WbEnumFields(WebBrowser: TWebBrowser; SL: TStrings): Boolean; function WbSetEditField(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean; function WbGetEditField(WebBrowser: TWebBrowser; FieldName: string; var Value: string): Boolean; function WbSetCheckBoxField(WebBrowser: TWebBrowser; FieldName: string; Checked: boolean): Boolean; function WbGetCheckBoxField(WebBrowser: TWebBrowser; FieldName: string; var Checked: boolean): Boolean; function WbBtnClick(WebBrowser: TWebBrowser; FieldName: string): Boolean;
implementation
function WbEnumFields(WebBrowser: TWebBrowser; SL: TStrings): Boolean; var i, j: Integer; FormItem: Variant; begin Result := True; if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then begin Result := False; Exit; end; for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do begin FormItem := WebBrowser.OleObject.Document.forms.Item(I); for j := 0 to FormItem.Length - 1 do begin try SL.Add(FormItem.Item(j).Name); except Result := False; Exit; end; end; end; end;
function WbFindField(WebBrowser: TWebBrowser; FieldName: string; var Field: TPoint): boolean; var i, j: Integer; FormItem: Variant; begin Result := False; if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then begin Exit; end; for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do begin FormItem := WebBrowser.OleObject.Document.forms.Item(I); for j := 0 to FormItem.Length - 1 do begin try if FormItem.Item(j).Name = FieldName then begin Field.x := i; Field.Y := j; Result := True; exit; end; except Exit; end; end; end; end;
function WbSetEditField(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean; var Field: TPoint; begin if not WbFindField(WebBrowser, FieldName, Field) then begin Result := false; exit; end; try WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Value := Value; Result := True; except Result := false; Exit; end; end;
function WbGetEditField(WebBrowser: TWebBrowser; FieldName: string; var Value: string): Boolean; var Field: TPoint; begin if not WbFindField(WebBrowser, FieldName, Field) then begin Result := false; exit; end; try Value := WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Value; Result := True; except Result := false; Exit; end; end;
function WbSetCheckBoxField(WebBrowser: TWebBrowser; FieldName: string; Checked: boolean): Boolean; var Field: TPoint; begin if not WbFindField(WebBrowser, FieldName, Field) then begin Result := false; exit; end; try WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Checked := Checked; Result := True; except Result := false; Exit; end; end;
function WbGetCheckBoxField(WebBrowser: TWebBrowser; FieldName: string; var Checked: boolean): Boolean; var Field: TPoint; begin if not WbFindField(WebBrowser, FieldName, Field) then begin Result := false; exit; end; try Checked := WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Checked; Result := True; except Result := false; Exit; end; end;
function WbBtnClick(WebBrowser: TWebBrowser; FieldName: string): Boolean; var Field: TPoint; begin if not WbFindField(WebBrowser, FieldName, Field) then begin Result := false; exit; end; try WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Click; Result := True; except Result := false; Exit; end; end;
end. |
Mit
Delphi-Quelltext
1:
| WbEnumFields(WebBrowser1, ListBox1.Items); |
können alle Felder eine Seite gelesen werde.
Mit
Delphi-Quelltext
1:
| WbSetEditField(WebBrowser1, 'name', 'Matthias'); |
kann z.B. ein Editfeld gefüllt werden.
Matthias