| Autor |
Beitrag |
uranop
      
Beiträge: 149
Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
|
Verfasst: 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 Narses: Topic aus VCL (Visual Component Library) verschoben am Do 04.12.2008 um 09:15
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mi 03.12.08 17:16
uranop hat folgendes geschrieben : | 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
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mi 03.12.08 17:19
Windows Authentication sollte auch mit Indy funktionieren
_________________ Markus Kinzler.
|
|
uranop 
      
Beiträge: 149
Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
|
Verfasst: 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 
      
Beiträge: 149
Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
|
Verfasst: 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 ...
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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 149
Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
|
Verfasst: 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 :
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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 149
Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
|
Verfasst: Do 04.12.08 19:19
jeppa i know .. aber is zum glück nur eine single page ohne irgendwelche frames ...
|
|
uranop 
      
Beiträge: 149
Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
|
Verfasst: Do 04.12.08 20:28
AAH ich kann machen was ich will
immer verhau ich mich inner syntax : )
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);
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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 04.12.08 20:30
Maskieren tust du mit einem weiteren '  . Delphi-Quelltext 1: 2:
| a := 'Ein String mit '' drin, auch am Ende'''; b := 'so'; |
|
|
uranop 
      
Beiträge: 149
Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
|
Verfasst: 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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 149
Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
|
Verfasst: 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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 149
Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
|
Verfasst: 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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 149
Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
|
Verfasst: 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 ...
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 ...
|
|