| |
|
|
Georg Hovenbitzer | Hallo zusammen,
wie man eine HTML Seite anzeigt ist mir dank diesem Forum bekannt
Aber wie bekomme ich den Quelltext dieser Seite, da ich darin nach einer bestimmten Zeichenkette suchen und diesen kopieren will
Mir fehlt vollkommen der Ansatz, hat jemand einen Tip ??? |
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 03.05.2006 ▲ |
|
|
|
|
| Dafür nimmst Du einfach die Download-Unit. |
|
|
| |
|
|
|
| Macht das nicht Dein Browser ? - Mozilla Firefox zeigt den Quelltext der grade geladenen Seite an: Ansicht -> Seitenquelltext anzeigen - |
|
|
| |
|
|
|
Frank Abbing | Beim IE versteckt sich die Funktion unter Ansicht/Quelltext. Ich denke aber, Georg möchte das selber programmieren. Also mal iFs Vorschlag testen. |
|
|
| |
|
|
|
Georg Hovenbitzer | Hallo zusammen,
ihr habt alle recht
Die Unit von iF macht eigentlich genau das was ich möchte, ABER sie scheitert an der Seite da man sich dort anmelden muss und die wohl über Sessions ID gemacht wird. Also komme ich damit nicht weiter.
Es gibt nach meiner Meinung zwei Möglichkeiten:
1. wget oder curl soweit zu bekommen, dass sie sich einloggen und die Seite ziehen, diese dann auswerten. Hier ist das Problem, dass ich die beiden Programme noch nicht dazu gebracht habe sich einzuloggen.
2. da ich mir die Seite in dem Moment ansehe wo ich die Daten aus dem Quelltext benötige, suche ich eine Möglichkeit im Hintergrund die Option des Browsers, den Quelltext zu zeigen, zu nutzen. Man könnte das Browserfenster fernsteuern, was mir aber nicht so gut gefällt (Tastaturcodes senden, im Editfenster alles markieren, kopieren und auswerten)
Ich hoffe es versteht einer was ich da geschrieben habe und kann mir einen Tip geben. |
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 04.05.2006 ▲ |
|
|
|
|
Clemens Meier | Es kommt auf das Login an. Du kannst dich mit der PCU von iF auch anmelden. Es kommt darauf an, ob du eine htaccess überwinden musst oder ob ein Formular benutzt wird. Und natürlich, dass du die Logindaten hast.
In beiden Fällen musst du die URL etwas ändern. Für einen htaccess müsste er wie folgt aussehen: [...]
Ist es ein Formular, musst du die Zugangsdaten an die URL dran hängen. Sähe dann so aus (ich glaube, die PCU von iF akzeptiert Querys): [...]
Mit der Session dürfte es auch kein Problem geben. Akzeptiert der Browser keine Cookies, wird die Sessionid bei jeder URL mit angehängt. So bekommst du sie also. Musst also in den Quelltext sehen, dir die Sessionid mit der entsprechenden Variablen rauspicken und diese dann jeweils an deine URLs dranhängen. |
|
|
| |
|
|
|
| Du kannst mit der Unit der Loginurl (php?) die Logindaten per get senden - und erhältst eine Seite welche warscheinlich auch die SessionID im Source haben wird. Eigendlich ist das was Du möchtest kein Problem, sei denn, die LoginPHP abverlangt die Logindaten ausschließlich per Post statt per Get. |
|
|
| |
|
|
|
Clemens Meier | Im letzteren Falle könnte er die Prozedur aus dem Thread [...] benutzen. Dann aber nicht den gleichen Fehler machen wie ich und vergessen die DLL einzubinden |
|
|
| |
|
|
|
Uwe ''Pascal'' Niemeier | @ Georg: Wie bzw. wo lässt du die Seite anzeigen? Normaler Browser oder HTML-Control unter Profan? In letzterem Fall: Wie erzeugst du es?
Möglicherweise gibt es eine COM-Lösung, oder man könnte die Datei im Cache ausfindig machen...
SeeYou Pascal |
|
|
| |
|
|
|
Georg Hovenbitzer | Hallo zusammen,
schon mal vielen Dank für die Hilfe Ich liebe dieses Forum
Ich probiere es zur Zeit über drei Möglichkeiten.
1. per alt.dll und einem AtlAxWin Control - damit habe ich es geschaft die Seite darzustellen. Hierbei wird kein Login benötigt, da wohl das Cookie benutzt wird und er sich damit automatisch einloggt.
2. per PCU von iF - hier geht es nun auch, was ebenso an dem Cookie liegt. Das zurück geben als String haut bei dieser Seite nicht hin, ich leite diesen an ein MultiEdit weiter und dabei verabschiedet sich das ganze (bei google.de klappt es mit der Anzeige). Abspeichern in einer Datei funktioniert.
3. Prozedur vom Clemens - diese haut nicht ganz hin, da diese wohl immer nur den ersten Frame nimmt. So sieht mir, dass was angezeit wird, aus.
Es gibt also schon eine lösung worauf ich aufbauen kann.
Es würde mich aber immer interessieren ob man den IE anzapfen kann um sich von dort den Quelltext zu ziehen. Dadurch bräuchte man die Seite nicht doppelt aufzurufen, da ich sie mir zu dem Zeitpunkt ja ansehe.
@Pascal Nun geht es mit beiden, also IE und HTML Control. Mit dem Cache hatte ich mir auch schon überlegt, da wenn man unter dem Browser sich den Quelltext ansieht, steht ja dort die Datei. Oder wird die in diesem Moment erst erstellt ? Mit COM kenne ich mich nicht aus, aber vielleicht hast du ja eine Idee. |
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 05.05.2006 ▲ |
|
|
|
|
Uwe ''Pascal'' Niemeier | Hallo Georg!
Hier ein experimenteller Code, um aus einem ATL-WebContol den Quelltext zu ermitteln: KompilierenMarkierenSeparieren $H Windows.ph
--------------------------------------------------------------------------------------------
proc StringToGUID---------------Umwandlung String > globally unique identifier
parameters GUID$,GUID&
declare Temp$
Temp$=space$(80)
~MultiByteToWideChar(1,1,addr(GUID$),-1,addr(Temp$),80)
external("ole32","CLSIDFromString",addr(Temp$),GUID&)
endproc-----------------------------------------------------------------------
proc CallMethod--------------------------Methode eines COM-Interfaces aufrufen
parameters IFace&,Method&
declare VTable&
VTable&=long(IFace&,0)
Method&=long(VTable&,Method&*4)
case %pcount=2:return call( Method&,IFace& )
case %pcount=3:return call( Method&,IFace&,&(3) )
case %pcount=4:return call( Method&,IFace&,&(3),$(4) )
case %pcount=5:return call( Method&,IFace&,&(3),&(4),&(5) )
endproc-----------------------------------------------------------------------
proc Quelltext_Lesen----------------------------Quelltext_Lesen---------------
parameters WebCtrl&
declare IID#,Error&
dim IID#,16
external("ole32","CoInitialize",0)
print "ATL-WebControl",WebCtrl&
print
declare IUnknown&
Error&=external("atl","AtlAxGetControl",WebCtrl&,addr(IUnknown&))
print "Error AtlAxGetControl",Error&
print "IUnknown",IUnknown&
print
declare IWebBrowser&
StringToGUID("{D30C1661-CDAF-11d0-8A3E-00C04FC9E26E}",IID#)--IID_IWebBrowser2
Error&=CallMethod(IUnknown&,0,IID#,addr(IWebBrowser&))-------IUnknown::QueryInterface
print "Error IUnknown::QueryInterface",Error&
print "IWebBrowser",IWebBrowser&
print
declare IHTMLDocument2&
Error&=CallMethod(IWebbrowser&,18,addr(IHTMLDocument2&))--IWebbrowser::get_Document
print "Error IWebbrowser::get_Document",Error&
print "IHTMLDocument2",IHTMLDocument2&
print
declare IHTMLElement&
Error&=CallMethod(IHTMLDocument2&,9,addr(IHTMLElement&))--IHTMLDocument2::get_body
print "Error IHTMLDocument2::get_body",Error&
print "IHTMLElement",IHTMLElement&
print
declare Text&
Error&=CallMethod(IHTMLElement&,62,addr(Text&))--IHTMLElement::get_outerHTML
print "Error IHTMLElement::get_outerHTML",Error&
print "Pointer outerHTML",Text&
declare Size&,Text#,Text$
Size&=external("oleaut32","SysStringLen",Text&)
dim Text#,Size&
~WideCharToMultiByte(0,0,Text&,-1,Text#,Size&,0,0)
external("oleaut32","SysFreeString",Text&)
Text$=string$(Text#,0)
dispose Text#
dispose IID#
external("ole32","CoUninitialize")
return Text$
endproc-----------------------------------------------------------------------
--------------------------------------------------------------------------------------------
window 0,0-800,600
usermessages 16
def AtlAxWinInit(0) !"atl.dll","AtlAxWinInit"
def AtlAxCreateControl(4) !"atl.dll","AtlAxCreateControl"
declare Atl&,Web&,a$
Atl&=usedll("atl.dll")
AtlAxWinInit()
a$="C:Test.html"-----------Pfad oder URL
Web&=control("AtlAxWin",a$,$50300000,400,0,380,250,%hwnd,0,0,$200)-HTML-Contol anlegen
a$=Quelltext_Lesen(Web&)
create("Multiedit",%hwnd,a$,0,290,780,250)----Text anzeigen
while 1
waitinput
case %umessage=16:break
endwhile
destroywindow(Web&)
freedll Atl&
Der Haken daran: Du erwähntest Frames... In dem Fall wirst du nur den Frameset angezeigt kriegen, es sei denn, du kannst die gewünschte Seite direkt anspringen.
Ich werde aber noch nach den anderen Möglichkeiten schaun
BTW: Wird den die besagte Seite überhaupt im Cache abgelegt (wenn sie sicherheitsrelevant ist, kann das doch auch unterdrückt werden)?
HTH Pascal |
|
|
| |
|
|
|
Georg Hovenbitzer | Hallo Pascal,
der Code klappt mit zwei kleinen Änderungen sehr gut. Dem Multiedit sollte man den Inhalt per Sendmessage zukommen lassen, da die meisten Seiten mehr als 255 Zeichen haben. Desweiteren habe ich nach dem AtlAxWin Control Aufruf ein Waitinput gesetzt, da es wenn die Seite noch nicht vollständig geladen wurde zu einem Systemfehler kommt.
Ich kenne mich mit COM überhaupt nicht aus, kommt man nun an das original Browserfenster ran oder muss man sich immer ein eigenes erstellen? |
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 08.05.2006 ▲ |
|
|
|