![]() |
Editfelder im Internet Explorer finden
Hallo,
ich weis, es gibt genügend Threads über das Finden von Handles, dennoch habe ich ein Problem, bei dem mir die anderen Beiträge nicht ganz so helfen konnten. Folgendes: Ich verwende IE7 mit Registern. Auf einer Website gibt es sehr viele Editfelder, die ich suchen und deren Text ich ermitteln möchte. Nun komm ich aber einfach nicht an die Editfelder heran, das Problem wird wohl bei mir sein, in das Registerfenster hineinzukommen, doch wie stell ich es an? Momentaner Code:
Delphi-Quellcode:
Wnd gibt mir das Handle des Internet Explorers zurück, ist ok. Nun habe ich bei der Ausgabe geschaut, welcher Klassenname für Register passt und das ist TabWindowClass. Doch in der Klasse werder mir wenige unpassende Klassen ausgegeben. Auch mit dem Handle des Registers kommen die vielen Editfelder nicht zum vorscheinen.
function EnumChildWindowsProc(hWnd: HWND; lParam: LPARAM): Boolean; stdcall;
var ClassName : array[0..255] of Char; Buffer : array[0..255] of Char; begin GetClassName(hWnd, ClassName, SizeOf(ClassName)); // Klassenname ermitteln SendMessage(hWnd, WM_GETTEXT, SizeOf(Buffer), Integer(@Buffer)); // Text des Objektes ermitteln Form1.Memo1.Lines.Add(IntToStr(hWnd) + ' ' + ClassName + ' ' + Buffer); Result := True; end; procedure TForm1.Button1Click(Sender: TObject); var Wnd: HWND; const CAPTION = ' TEXT... - Windows Internet Explorer'; begin Wnd := FindWindow(nil, CAPTION); Label1.Caption := IntToStr(Wnd); if Wnd <> 0 then EnumChildWindows(Wnd, @EnumChildWindowsProc, 0); end; Wie muss ich heran gehen, um wirklich den Inhalt der aktuellen Website mit FindWindow, EnumChildWindows bearbeiten zu können? Gruß Mazel |
Re: Editfelder im Internet Explorer finden
Hallo,
wenn du Felder aus einer Webseite auslesen oder ausfüllen möchtest dann könntest du es mit dem TWebbrowser versuchen. Die Felder und Buttons innerhalb einer Webseite habe normalerweise kein Windowhandle. Wenn es kein großes Geheimnis ist, dann kannst du ja mal einen Link zur Webseite oder den Seitenquelltext posten. Suche mal nach [dp]TWebbrowser ausfüllen[/dp] oder auslesen. |
Re: Editfelder im Internet Explorer finden
Hallo,
und erstmal danke. Das ist natürlich schade, dass das nicht so geht wie ich es mir gewünscht habe. Gut, es handelt sich bei der Website um eine Philatelie Seite. Dort kann man Fehl- und Dublettenlisten erstellen. Das heißt, man hat eine Tabelle in der man in Editfelder die Katalognummer, Menge, etc. eintragen kann. Folgender Link zeigt wie es nach erstellen aussieht: ![]() Leider ist es noch nicht möglich, und ich weis nicht wie lange es noch dauern wird, diese Listen zu sortieren. Wenn man also bsp. die Katalognummer 345 hat, trägt man diese in der letzten Zeile ein, und dort bleibt sie leider, wird also nicht eingereiht. Momentan ist es auch nicht möglich eine Dublettenliste zu importieren, Fehllisten wiederum ja, und das ist schon längere Zeit der Fall. Ich dachte mir, ich lese die Editfelder aus, speichere sie, sortiere die Liste und gebe die neue sortierte Liste wieder in die Editfelder aus und speichere das ganze neu ab. Ich hoffe man konnte folgen ;). Edit: Es sieht im Gegensatz zu meiner Idee doch ziemlich einfach aus, wenn man mit TWebrowser arbeitet, warum ich da nicht gleich auf die Idee gekommen bin :gruebel:. |
Re: Editfelder im Internet Explorer finden
Liste der Anhänge anzeigen (Anzahl: 2)
Die Tabelle kann man auch ohne den TWebbrowser ausgelesen.
Getestet mit den IE 6 ohne Register. Beim Programmstart wird die Seite einfach halber in den IE geladen. |
Re: Editfelder im Internet Explorer finden
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ah, ich glaube, wir haben da uns ein wenig missverstanden. Der Link ist die Ausgabe, im folgenden Bild siehst du, wie es beim Erstellen aussieht. Den Teil kann ich sicher auch einfach auslesen, aber neue Werte setzen kann ich mit dem Code von dir nicht. Also das Neusetzen und dann das Speichern. |
Re: Editfelder im Internet Explorer finden
Zitat:
Delphi-Quellcode:
Die Tabelle ausfüllen jedenfalls lässt sich zumindest damit bei mir.
TrNode.all.tags('td').Item(l).innerText:= ...;
|
Re: Editfelder im Internet Explorer finden
Ok, versucht habe ich das noch nicht, werde ich aber machen.
Ich nehme an, du willst darauf hinaus, dass man die Ausgabetabelle bearbeitet. Das könnte gehen, aber die kann ich nicht abspeichern, deshalb müsste es über das Formular laufen. |
Re: Editfelder im Internet Explorer finden
Zitat:
Du möchtest also die Liste danach auf dem Server abspeichern obwohl es dort gar nicht vorgesehen ist? |
Re: Editfelder im Internet Explorer finden
Doch, dies ist möglich. Du siehst auf dem Bild in meinem letzten Beitrag die grauen Editfelder. Das gehört zu einem Formular. Viel weiter unten, nicht auf dem Bild zu sehen, ist der Speichern Button.
Den Link, den du dir angeschaut hast, sollte nur zeigen, wie andere Benutzer meine Liste sehen, das das unter umständen eben nicht sortiert sein kann. Die User können die Liste natürlich nicht bearbeiten sondern nur anschauen. |
Re: Editfelder im Internet Explorer finden
Die Eingaben müssen doch irgendwo gespeichert werden, die Frage ist wo ? Wenn es eine datenbank ist, kannst Du doch durch eine Datenbankabfrage die Ausgabe sortiert ausgeben.
|
Re: Editfelder im Internet Explorer finden
Zitat:
Die Eingabeliste können sicherlich nur registrierte Benutzer wie du bearbeiten. |
Re: Editfelder im Internet Explorer finden
@RWarnecke:
Eine Datenbank ist es, aber ich habe kein direkten Zugriff auf die Daten. Desweiteren geht es ja nicht nur um mich sondern um weitere andere User die diese Listen einsehen können. @bitsetter: Genau so werde ich das machen. Nun habe ich aber noch nicht probieren können ob dein Code auch in Editfelder schreibt (siehe innerText) oder ob es nur mit TWebbrowser funktioniert. Ich war der Meinung, dass du versuchen willst, die Ausgabeliste zu bearbeiten, die nicht gespeichert werden kann. Nur die Eingabeliste, die die Editfelder beinhaltet und die, wie du richtig erwähnt hast, nur Mitglieder des Forums bearbeiten können, kann ich auf dem Server per Button Klick speichern. |
Re: Editfelder im Internet Explorer finden
Mein Code lauft ohne den TWebbrowser du könntest dich auch in eine geöffnete Seite das IE einklinken.
Mit dem TWebbrowser müsste es auch gehen. Zitat:
Zitat:
![]() Zitat:
|
Re: Editfelder im Internet Explorer finden
Ja wird wohl nötig sein. Ich werde mir dein Code mal genau anschauen und dann vergleichen, welche Variante (deine oder TWebbrowser) am günstigsten ist. Zudem muss ich sagen, dass ich noch nie mit OleObjekten gearbeitet habe, muss mich damit auch mal auseinander setzen :wink:
Auf jedenfall danke ich dir für deine Hilfe und Mühe, bitsetter. :thumb: Gruß Mazel |
Re: Editfelder im Internet Explorer finden
Versuche es erst mal selbst, wenn gar nicht anders kannst du mir ja die Seite per PN zuschicken, dass hat DaniOne damals auch gemacht.
|
Re: Editfelder im Internet Explorer finden
Mit TWebbrowser habe ich, so denke ich, eine Lösung gefunden. Mich interessiert aber auch dein Weg, denn so würde es ohne der Komponente gehen. :zwinker:
Ich melde mich, falls noch weitere Fragen sind. |
Re: Editfelder im Internet Explorer finden
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
![]() |
Re: Editfelder im Internet Explorer finden
Hey super. :thumb:
Jeder Beitrag ein Schritt weiter. Nun sind in dem Code für mich 2 neue weitere Unbekannte dabei (IShellWindows und IWebbrowser2), deren Aufgabe mir aber klar ist - das Finden der aktuellen URL. Ich hatte mich vorhin auch schon mit "IE.all.tags" auseinander gesetzt. Ich habe, um die Editfelder zu finden den Code nun so abgeändert, dass die Editfelder übernommen werden.
Delphi-Quellcode:
Das funktioniert soweit recht gut. Jetzt nur noch ein wenig sortieren und wieder ausgeben.
procedure TMForm.BtnClick(Sender: TObject);
var i, l, TdCount : integer; TableNode, TrNode: Variant; ListItem : TListItem; ShellWin : IShellWindows; loop : Integer; wb : IWebBrowser2; begin ShellWin := CoShellWindows.Create; for loop := 0 to Pred(ShellWin.Count) do begin wb := ShellWin.Item(loop) as IWebBrowser2; if pos('briefmarken/forum/anlegen', wb.LocationURL)> 0 then begin ie := wb.Document; TableNode := IE.all.tags('form').Item(0); if TableNode.all.tags('input').Length > 0 then begin for i := 2 to TableNode.all.tags('input').Length - 1 do begin if (Pos('katalognr', TableNode.all.tags('input').Item(i).Name) <> 0) and (TableNode.all.tags('input').Item(i).Value <> '') then begin ListItem := Lv.Items.Add; ListItem.Caption := TableNode.all.tags('input').Item(i).Value; ListItem.SubItems.Add(TableNode.all.tags('input').Item(i + 1).Value); ListItem.SubItems.Add(TableNode.all.tags('input').Item(i + 2).Value); end; end; end; Break; end; end; end; Ich glaube, ich werde auf deinem Weg bleiben ;) Nochmals recht vielen Dank. Gruß Mazel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz