Delphi: TWebbrowser – Formulare ausfüllen und „abschicken“

Für die Automatisierung mit Hilfe des TWebbrowser benötigt man den folgenden Code.
uses mshtml;

function FillForm(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean;
var
i, j: Integer;
FormItem: Variant;
begin
Result := False;
//no form on document
if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
begin
Exit;
end;
//count forms on document
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
//when the fieldname is found, try to fill out
if FormItem.Item(j).Name = FieldName then
begin
FormItem.Item(j).Value := Value;
Result := True;
end;
except
Exit;
end;
end;
end;
end;


if FillForm(WebBrowser1, 'username', 'mein_username') = False then
Form1.caption:=version;

=> Ausfüllen des Formularfeldes „username“ mit dem Inhalt „Username“.
=> Ausweitbar auf weitere Formularfelder wie „passwort“, „webseite“ usw., sofern Objektnamen bekannt.
Webbrowser1.OleObject.document.forms.item(0).submit();
=> Ausgefüllte Inhalte werden abgeschickt

Delphi: Twebbrowser – Elemente (ohne ID) automatisch anklicken lassen

Bei einem unserer Projekte musste ich eine Lösung suchen, welche das Anklicken von Webseitenelementen erlaubt.
Vorausgesetzt, es handelt sich hierbei um einen „span“-tag, welcher einen eindeutigen (!) Namen trägt, gehe ich so vor:

var
ovElements: OleVariant;
i: Integer;


try
ovElements := WebBrowser1.OleObject.Document.all;
for i := 0 to (ovElements.Length - 1) do
if (ovElements.item(i).className = 'name') then
begin
try
ovElements.item(i).Click;
except
//fehlerbehandlung I
end;
end;
except
//fehlerbehandlung II => TEST
end;

Delphi: TWebbrowser – Version wechseln // festlegen

Im Normalfall muss man sich (leider) bei Delphi mit einer veralteten IExplorer-Version herum ärgern, wenn man Seiten wie bspw. Instagram aufrufen und „bearbeiten“ möchte.
Dieses Problem kann man nun so lösen:

uses registry

type
TIEMode = (iemIE7, iemIE8, iemIE10);

=> Vardeklaration
procedure SetWebbrowserMode(Mode: TIEMode; AppName: string = '');
const
REG_KEY = 'Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION';
var
Reg: TRegistry;
Value: Integer;
begin
if AppName = '' then
AppName := ExtractFileName(Application.ExeName);
Case Mode of
iemIE7 : Value := $1B58;
iemIE8 : Value := $1F40;
iemIE10 : value := $2710;

end;
Reg := TRegistry.Create();
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey(REG_KEY, True) then
begin
Reg.WriteInteger(AppName, Value);
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;

=> Funktion für Browserversionswechsel
SetWebbrowserMode(iemIE10);
=> Browserversion auf IE10 setzen (Funktionsaufruf)

[Delphi] – Stringgrid sortieren.

Folgender Code löst das Sortierproblem bei folgender Ausgangslage:
– Stringgrid, gefüllt mit Zahlen

procedure SortGrid(Grid: TStringGrid; Col: integer);
var i, j: integer;
prev: string;
begin
for j:= 0 to Grid.RowCount- 1 do
for i:= 2 to Grid.RowCount- 1 do
begin
if strtoint(Grid.Cells[Col, i])> strtoint(Grid.Cells[Col, i-1]) then
begin
prev:= Grid.Rows[i- 1].CommaText;
Grid.Rows[i- 1].CommaText:= Grid.Rows[i].CommaText;
Grid.Rows[i].CommaText:= prev;
end;
end;
end;

Der Aufruf funktioniert über den folgenden Befehl:
SortGrid(grid, [spalte]);
„[spalte]“ muss dann entsprechend gefüllt werden (2,1 etc.).

Links aus Dateien auslesen (via Delphi)

Auf der Suche nach einer Möglichkeit, Links aus bspw. CSV, XML etc. auslesen zu können, entdeckte ich die folgende Möglichkeit:

Unit zum Auslesen von Links aus Text-Datei (Delphipraxis, Account zum Download der Unit notwendig)

Die Einbindung funktioniert wie folgt:

//ausleseprozedur
procedure auslesen;
var
Links: TExtractLinksFromTextFile;
Link: TLinkObj;
i: Integer;
begin
Memo1.Clear;
Links := TExtractLinksFromTextFile.Create;
try
Links.Filename := filename;
Links.ExtractLinks;
for i := 0 to Links.LinkList.Count – 1 do
begin
Link := TLinkObj(Links.LinkList.Items[i]);
Memo1.Lines.Add(Link.Caption+‘: ‚+ Link.HREF);
end;
finally
Links.Free;
end;
end;

//einleseprozedur
procedure einlesen;
begin
quelle.text:=idhttp1.get(quell_datei);
auslesen;
memo1.lines.savetofile(ziel_datei);
// gef.-Liste weiter verarbeiten
end;