| Autor |
Beitrag |
CABALxx
      
Beiträge: 174
D7 Ent
|
Verfasst: Fr 20.02.04 14:16
Hallo
und ich bins mal wieder....mit einem problem ( ich weiss langsam nervts )
alsooooo
mit diesem code hier
Delphi-Quelltext 1: 2: 3: 4: 5:
| WebBrowser1.Document.QueryInterface(IHTMLDocument2, iDoc1); if iDoc1 <> nil then begin Memo1.Lines.Add(iDoc1.Body.InnerHTML); end; |
liest man ja den quelltext einer aktuell im TWebBrowser angezeigten Seite aus.....
WICHTIG: hier geht es drum ohne erneutes Aufrufen einer Seite, den Quelltext einer seite die aktuell im TWebBrowser angezeigt wird auszulesen.
( weil das andere ist ja nicht alzu schwer mit idHTTP.get und anderen funktionen........ )
soo das alles schön und gut, nun möchte ich aber den Quelltext eines ganz bestimmten frames einer aktuell im TWebBrowser angezeigten seite auslesen ohne diese neu aufzurufen / aufrufen zu lassen bzw zu laden etc....
eben auf ähnlich weisse...
wie mach ich das ?
wäre cool wenn jemand ne antwort wüsste
danke schon mal 
Zuletzt bearbeitet von CABALxx am Di 02.03.04 19:56, insgesamt 1-mal bearbeitet
|
|
Styler
      
Beiträge: 58
WinXP Home
Delphi 7 Studio Enterprise german
|
Verfasst: Fr 20.02.04 14:20
also sorry aber ich versteh nicht unbedingt was du damit sagen willst ... 
_________________ Die Rechtschreibfehler habe ich extra gemacht und dienen zur allgemeinen Belustigung.
|
|
CABALxx 
      
Beiträge: 174
D7 Ent
|
Verfasst: Fr 20.02.04 16:07
ganz einfach
wenn man den quelltext einer seite z.B.
mit
Delphi-Quelltext 1:
| idHTTP.get('seite.html'); |
ausliest
dann wird die seite komplett neu aufgerufen und ihr quelltext ausgelesen
nun will ich aber nur den quelltext auslesen lassen von einer seite die aktuell im TWebBrowser dargestellt wird OHNE die seite neu aufrufen zu lassen....
das geht so
Delphi-Quelltext 1: 2: 3: 4: 5:
| WebBrowser1.Document.QueryInterface(IHTMLDocument2, iDoc1); if iDoc1 <> nil then begin Memo1.Lines.Add(iDoc1.Body.InnerHTML); end; |
gut das ja kein problem
und nun würde ich eben gerne wissen wie man das macht
das auf gleiche weisse ( also ohne das die seite erneut aufgerufen wird bzw. ausgelesen wird ) der quelltext eines frames , einer aktuell in TWebBrowser dargestellten seite , ausgelesen wird
denn wenn man eine seite mit frames mit der oben genannten variante ausliest bekommt man nur den quelltext für das reine framegerüst....
( kann ja mal nebenbei auf einen ähnlichen beitrag von mir in einem andern delphi forum verweissen
wer sich das mal durchliest versteht um was es geht bzw wozu es dienen wird / soll / könnte
www.swissdelphicente...66f6e5f0b5dcdffa8e28
|
|
CABALxx 
      
Beiträge: 174
D7 Ent
|
Verfasst: So 22.02.04 17:31
keiner ne idee? 
|
|
Chris1308
      
Beiträge: 220
Win XP Prof.
D2005 Prof, D7 Prof, D7 Pers
|
Verfasst: Mo 23.02.04 22:53
Hi,
soweit ich weiß, gibt es eine Eigenschaft Frames bei der Eigenschaft Documents. Da müsstest du mal nachgucken...
Chris
|
|
CABALxx 
      
Beiträge: 174
D7 Ent
|
Verfasst: Di 24.02.04 10:31
ja die idee ist sehr gut
aber nach dem framenamen im unten angegebenen code weiss ich nicht mehr weiter
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button1Click(Sender: TObject); var iDoc1 : IHTMLDocument2; begin WebBrowser1.Document.QueryInterface(IHTMLDocument2, iDoc1); if iDoc1 <> nil then begin Memo1.Lines.Add(WebBrowser1.OleObject.document.item('mainframe').........); end; end; |
hmm...
den ansatz hab ich aus nem andern projekt aber ich hab keine ahnung obs stimmt....
|
|
Chris1308
      
Beiträge: 220
Win XP Prof.
D2005 Prof, D7 Prof, D7 Pers
|
Verfasst: Di 24.02.04 11:55
Hi,
ich hab jetzt mal reinlogisch folgenden Source zusammengewürfelt:
Delphi-Quelltext 1: 2: 3: 4: 5:
| WebBrowser1.Document.Frames.item('FrameName').QueryInterface(IHTMLDocument2, iDoc1); if iDoc1 <> nil then begin Memo1.Lines.Add(iDoc1.Body.InnerHTML); end; |
Wenn das nicht funktionieren sollte, muss ich auch nochmal schauen, allerdings funktioniert mein Delphi im Moment nicht so, wie es sein sollte, deswegen kann ich das jetzt nicht überprüfen.
Chris
|
|
CABALxx 
      
Beiträge: 174
D7 Ent
|
Verfasst: Di 24.02.04 13:21
also das geht nur mit nem OleObject
und dann hab ich das folgender massen gemacht
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button1Click(Sender: TObject); var iDoc1 : IHTMLDocument2; begin WebBrowser1.OleObject.document.frames.item('mainframe').QueryInterface(iDoc1); if iDoc1 <> nil then begin Memo1.Lines.Add(iDoc1.Body.InnerHTML); end; end; |
bei den andern methoden hat der debugger gleich alarm geschlagen
wenn ich das so mache dann lässt sich das programm ohne probleme compilieren
nur wenn ich dann den button drücke
kommt ne fehlermeldung
das QueryInterface da irgendwie nicht mitspielen würde
aber warn sehr guter ansatz 
|
|
CABALxx 
      
Beiträge: 174
D7 Ent
|
Verfasst: Do 26.02.04 20:40
|
|
CABALxx 
      
Beiträge: 174
D7 Ent
|
Verfasst: So 29.02.04 15:26
hat keiner eine idee, wie man den code hier
Delphi-Quelltext 1: 2: 3: 4: 5:
| WebBrowser1.Document.QueryInterface(IHTMLDocument2, iDoc1); if iDoc1 <> nil then begin Memo1.Lines.Add(iDoc1.Body.InnerHTML); end; |
so umschreibt
das er den quelltext eines bestimmten Frames ausliesst , von einer seite die aktuell in TWebBrowser angezeigt wird, OHNE die seite neu zu laden oder aufzurufen ??
könnt ja mal das ganze thema durchlesen, vielleicht kommt dann ne gute idee 
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: So 29.02.04 15:38
Hi,
Vielleicht hilft dir das:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62:
| uses ActiveX;
function TForm1.GetFrame(FrameNo: Integer): IWebbrowser2; var OleContainer: IOleContainer; enum: IEnumUnknown; unk: IUnknown; Fetched: PLongint; begin while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages; if Assigned(Webbrowser1.document) then begin Fetched := nil; OleContainer := Webbrowser1.Document as IOleContainer; OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum); Enum.Skip(FrameNo); Enum.Next(1, Unk, Fetched); Result := Unk as IWebbrowser2; end else Result := nil; end;
procedure TForm1.Button1Click(Sender: TObject); begin Webbrowser1.Navigate('http://www.warebizprogramming.com/tutorials/html/framesEx1.htm'); end;
procedure TForm1.Button2Click(Sender: TObject); var IpStream: IPersistStreamInit; AStream: TMemoryStream; iw: IWebbrowser2; i: Integer; sl: TStringList; begin for i := 0 to Webbrowser1.OleObject.Document.frames.Length - 1 do begin iw := GetFrame(i); AStream := TMemoryStream.Create; try IpStream := iw.document as IPersistStreamInit; if Succeeded(IpStream.save(TStreamadapter.Create(AStream), True)) then begin AStream.Seek(0, 0); sl := TStringList.Create; sl.LoadFromStream(AStream); sl.SaveToFile('c:\frame' + IntToStr(i) + '.txt'); sl.Free; end; except end; AStream.Free; end; end;
end. |
|
|
CABALxx 
      
Beiträge: 174
D7 Ent
|
Verfasst: So 29.02.04 19:58
ehmm
bin sehr froh das mal wieder jemand geantwortet hat
///EDIT:
OK
kacke
war mein fehler
funktioniert einwandtfrei muss nachher mal testen ob ich damit weiter komme
vielen danke schon mal 
|
|
CABALxx 
      
Beiträge: 174
D7 Ent
|
Verfasst: Mo 01.03.04 23:02
|
|