Autor Beitrag
uranop
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
BeitragVerfasst: Mi 03.12.08 17:04 
Hallo Leute,

ich habe mal ne kleine Frage ( wie immer :) )...

Unser Werk hat eine , für gewisse Leute mit gewissen Rechten, eingerichtete UserDatenbank.
Diese ist ein Abbild der ActiveDirectory .
Erreichbar über ein Webinterface.

Ich möchte nun folgendes.

Dort in ein definiertes Feld "userID" die ID eintragen , steht in einem Edit feld
und über einen Button hergehen, den submit Klick simulieren, die nächste Seite abwarten ( dauert zwischen 1 und 10s ).
Dort wiederum den submit Klick simulieren - abermals gewisse Zeit verstreichen lassen -
und zum Schluss die ermittelten Daten in meine restlichen Editfelder pipen.

Nun gehts schon los, TWebBrowser oder eine IdHTTP ?
Welche der beiden Komponenten unterstüzt Windows-"passthrou"-Anmeldung ?

Und wie kann ich es fertig bringen das ich exakt den Ablauf zusammen bekomme wie oben beschrieben ?

ein Programm interner sleep geht ja denke ich nicht, da dann auch die komponente die den browser im hintergrund bedient schlaeft ?


Bin mal auf Anregungen gespannt ...


Gruß


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Do 04.12.2008 um 09:15
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mi 03.12.08 17:16 
user profile iconuranop hat folgendes geschrieben Zum zitierten Posting springen:
Nun gehts schon los, TWebBrowser oder eine IdHTTP ?
Welche der beiden Komponenten unterstüzt Windows-"passthrou"-Anmeldung ?

Wenn ich das noch richtig weiß, kapselt TWebBrowser lediglich den IE und damit sollte dann Windows Authentication funktionieren, mit IdHTTP sicher nicht, da müsstest Du Credentials mitgeben. Da weiß ich allerdings nicht, ob IdHTTP das unterstützt, in .NET wäre es eine einfache Sache ;).
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mi 03.12.08 17:19 
Windows Authentication sollte auch mit Indy funktionieren

_________________
Markus Kinzler.
uranop Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
BeitragVerfasst: Mi 03.12.08 17:20 
ay danke habe ich mir schon fast gedacht ...
auch wenn einige kollegen von mir meinen ich solle indy nehmen werde ich nun erst mal auf den webbrowser zurückgreifen.
komplizierter kann man es ja immer noch machen...

die passthrou bedingung brauche ich, da mehrere leute damit arbeiten sollen und nicht immer "meinen" account dazu benutzen muessen sich zu authen... der ganze auth kram soll im hintergrund statt finden sonst kann man ja gleich direkt auf die seite gehen : )
uranop Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
BeitragVerfasst: Mi 03.12.08 18:44 
Hmmm sagt mal. Ist es normal das TWebBrowser rumspackt mit Access Violations ?

ich habe nur diesen simplen code hier um
erst mal dahin zu gelangen wo ich eigentlich hin will ...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button59Click(Sender: TObject);
begin
WebBrowser1.Navigate('http://adresse.im.lan/');
WebBrowser1.OleObject.document.forms.item('queryForm').elements.item('userId').value := Edit11.Text;
WebBrowser1.OleObject.document.forms.item('queryForm').submit;
WebBrowser1.OleObject.document.forms.item('detailsForm').submit;

end;


Ich habe extra nen kleines Fenster zum guggen was der IE macht offen gelassen,
aber ich habe folgendes Problem.

Ich sehe die Startseite. -> Passthrou geht
Schon in dem Moment wo ich meine Userid aus Edit11 uebergeben will bekomme ich nen AccessViolation.
Er traegt garnicht erst das ein was ich ihm gebe...

das der rest denn auch nicht funzt is klar.

forms.item und elemtens.item stimmen !

o.0
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 03.12.08 19:10 
Ich vermute, dass das Laden bei dir noch gar nicht fertig ist, schließlich führst du den Code ja direkt nach dem Start der Navigation aus.
Wenn das Laden beendet ist, wird das Event OnDocumentComplete2 oder so ähnlich ausgelöst, darauf musst du reagieren.
uranop Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
BeitragVerfasst: Do 04.12.08 10:12 
So, ich habe den browser zu schnell angetrieben richtig.
nutze nun " ondocumentcomplete " um nen sauberen ablauf zu erhalten.

Jetzt muss ich nur noch das was ich im htmlcode habe in meine editfelder jagen.

Wenn ich mich richtig erinner dann geht dad ungefähr so :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.WebBrowser1DocumentComplete3(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var lesn : IHTMLDocument2;
begin
  lesn:=Webbrowser1.Document as IHTMLDocument2;
  lesn....mach.wad

end;


nun nur noch das "lesn" parsen ?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 04.12.08 11:09 
Das Parsen hat ja der TWebBrowser schon für dich gemacht, auswerten kannst du das dann mit lesn, ja.

Sehr sehr viel schneller wäre es natürlich ohne TWebBrowser zum Laden und mit selbst parsen. TIdHttp ist eben sehr viel schneller, aber man muss alles selbst machen.

Beachten musst du noch, dass OnDocumentComplete bei jedem Frame aufgerufen wird, solltest du mehrere haben, dann brauchst du noch das:
www.cryer.co.uk/bria...m#OnDocumentComplete
uranop Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
BeitragVerfasst: Do 04.12.08 19:19 
jeppa i know .. aber is zum glück nur eine single page ohne irgendwelche frames ...
uranop Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
BeitragVerfasst: Do 04.12.08 20:28 
AAH ich kann machen was ich will
immer verhau ich mich inner syntax : )

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.WebBrowser1DocumentComplete2(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
a,b : integer;
Doc : string;
begin
WebBrowser1.OnDocumentComplete := nil;
Doc:=WebBrowser1.OleObject.Document.Body.InnerHtml;

  a := pos('<input type="hidden" name="firstname" value='',Doc);
  b := PosExt( '
'>', Doc, a);
  Edit1.Text := inttostr(b-a);


//WebBrowser1.OleObject.Document.Forms.item(0).Submit;
//WebBrowser1.OnDocumentComplete := WebBrowser1DocumentComplete3;
end;


so wie man sehen kann ist in den zeilen mit a und b jeweils ein ' zuviel ...
muss aber sein weil dies zurm source gehört

in php einfach nen \ davor und gut ist ..
momentan steh ich aber bissl aufn schlauch wie ich das hier hinbiege xD

is vll banal aber ich komm nicht drauf : )
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 04.12.08 20:30 
Maskieren tust du mit einem weiteren ' ;-).
ausblenden Delphi-Quelltext
1:
2:
a := 'Ein String mit '' drin, auch am Ende''';
b := 'so';
uranop Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
BeitragVerfasst: Do 04.12.08 20:46 
ah man.. danke
is schon schlimm wenn man den wald vor lauter baeumen nicht sieht :)

ich frag mich jetzt momentan nur warum ich immer eine 0 rausbekomme ...
obwohl ich die exakten string zum definieren vor und nach dem wert angegeben habe ...
und ich die seite ja so auch sehe ... da steht was drin grmbl

etwas verwirrt bin ...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 04.12.08 20:59 
Debugge das doch, setze einen Haltepunkt auf die erste Zeile (F5) und geh dann zeilenweise durch ( F8 ), und dann schau mal was in Doc steht, etc., dafür musst du dann nur die Maus über die Variablen halten. Und mit Strg + F7 kannst du einen Ausdruck auswerten lassen, den du markiert hast (z.B. "PosEx('''>', Doc, a)".
uranop Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
BeitragVerfasst: Do 04.12.08 21:11 
Fehler gefunden, Ursache jedoch nicht..
In Doc steht die komplette page im source . soweit ok

wenn ich nun mit Pos und PosExt anfange ... sind diese integer werte schon 0
was eigentlich unerklaerlich ist, aber für mich heisst : das prog findet die strings im source nicht.

hmm
gibt es denn och eine andere art und weise aus dem htmlcode die ganzen werte raus zu ziehen die ich brauche ?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 04.12.08 21:20 
Warum greifst du eigentlich nicht auf die Elemente der Seite direkt zu? Ich meine, wenn du doch den Quelltext selbst auseinander nehmen willst, dann brauchst du auch TWebBrowser nicht...
uranop Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
BeitragVerfasst: Do 04.12.08 21:44 
weil das ergebnisseiten sind von aspx sites eines IIS servers ...
da komm ich einfach so nicht hin ...
da muss ich vorher schon mit dem passthroulogon drauf ...
die formularfelder aus füllen um dann die daten sehen zu können ...
statisch einlesen kann ich das auch nicht weil sich ja der source je nach user ( den ich da auslese ) immer aendert
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 04.12.08 21:57 
Das kann man normalerweise alles auch nonvisuell mit TIdHttp machen, egal ob Anmeldungen oder Cookies.

Aber was ich noch meinte war ja, warum du nicht direkt auf die Felder zugreifst. Beispiele dafür gibt es im Internet viele, zum Beispiel hier:
www.cryer.co.uk/bria...te_form_elements.htm
Den Quelltext selbst noch einmal zu parsen ist doch doppelte Arbeit, schließlich hat das das TWebBrowser-Control auch bereits getan und stellt dir das Ergebnis ja zur Verfügung.
uranop Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
BeitragVerfasst: Fr 05.12.08 11:16 
hmm also ich habe das mal so versucht ...
da steigt mir delphi aus mit massig fehlermeldungen in der mshtml unit
nicht grade befriedigend :)

ausserdem ist ja nur ein teil in verstecken hidden inputs der rest ist blankes html

[Edit]
Ursache lokalisiert ...

ausblenden Delphi-Quelltext
1:
Doc:=WebBrowser1.OleObject.Document.Body.InnerHtml;					


ist der übeltäter ...
der source wird zwar ausgelesen aber nicht so wie man es vom IE oder FF kennt .... da fehlt ueber die haelfte ...