Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Quellcode aus TWebBrowser (https://www.delphipraxis.net/171230-quellcode-aus-twebbrowser.html)

-remit- 27. Okt 2012 09:58

Quellcode aus TWebBrowser
 
Ich habe beim Programmieren festgestellt, dass die TWebbrowser Komponente 3 unterschiedliche Quelltexte liefert:
1. WebBrowser1.OleObject.Document.documentElement.out erhtml;
2. WebBrowser1.OleObject.Document.documentElement.inn erhtml;
3. Rechtsklick auf Webbrowser und dann "Quellcode anzeigen"

Quelltext 1 und 2 beinhalten noch verlinkte CSS-Datein und vollen (unausgeführten) Java-Script und sind doppelt so lang wie Quelltext 3, der die Website so darstellt, dass Javascript ausgeführt wurde. Ich benötige den 3. Quelltext-Typen. Welchen Befehl benötige ich um auf diesen zuzugreifen? Ich habe bis jetzt nur viel zu Punkt 1 und 2 gelesen.

Bernhard Geyer 27. Okt 2012 10:15

AW: Quellcode aus TWebBrowser
 
Würde mich auch interessieren.
Aber ob MS das vorgesehen hat? Habe schon haarsträubende Erfahrungen mit der COM-Schnittstelle vom IE-Control gemacht ...

-remit- 27. Okt 2012 12:03

AW: Quellcode aus TWebBrowser
 
MS muss es vorgesehen haben, wie sonst wird der 3. Quellcode generiert? Wie kann man auf das Rechtsklick- Menü zugreifen, bzw. auf die Schaltfläche "Quellcode anzeigen"? Dies wäre zwar ein wenig Aufwand sollte doch aber möglich sein.

Edit:
Welche weitere Möglichkeit gäbe es mit Delphibordmitteln folgendes zu tun:
- eine Website aufrufen (Indy)
- 2 HTML-Forms ausfüllen (Indy)
- JavaScriptbutton betätigen (kein Indy :()
- angezeigtes HTML auswerten (Indy)

Andreas L. 27. Okt 2012 12:12

AW: Quellcode aus TWebBrowser
 
Zitat:

Zitat von -remit- (Beitrag 1188617)
- JavaScriptbutton betätigen (kein Indy :()

Vielleicht kannst du den JavaScript-Code nach Delphi portieren. Dann lässt sich alles mit Indy umsetzen.

-remit- 27. Okt 2012 12:20

AW: Quellcode aus TWebBrowser
 
Über den Javascriptbutton werden Daten aus einer Datenbank der Website abgerufen, geht das dann auch noch mit Indy?

Andreas L. 27. Okt 2012 12:28

AW: Quellcode aus TWebBrowser
 
Zitat:

Zitat von -remit- (Beitrag 1188621)
Über den Javascriptbutton werden Daten aus einer Datenbank der Website abgerufen, geht das dann auch noch mit Indy?

Um das zu beantworten müssten wir den JS-Code sehen.

-remit- 27. Okt 2012 12:42

AW: Quellcode aus TWebBrowser
 
Das müsste die function sein, welche durch den Button aufgerufen wird:
Code:
function edVereinsspielplan()
{
  $("edLegendeSwitch").style.borderTop="1px solid #8D8D8D";
  $("edVspielplanOut").innerHTML="Einen Moment bitte. Der Spielplan wird geladen.";
  $("edWarten").style.visibility="visible";
  new Ajax.Updater("edVspielplanOut","/api/fbed/fbedVereinsspielplan.php",
    {evalScripts:true,asynchronous:true,method:"post",parameters:
    {edMandant:edMandant,
    edVereinId:edVereinId,
    edDatumVon:$F("edDatumVon"),
    edDatumBis:$F("edDatumBis"),
    edMannschaftChk0:$F("edMannschaftChk0"),
    edMannschaftChk1:$F("edMannschaftChk1"),
    edMannschaften:Object.toJSON(edMannschaften),
    edAustragungsort0:$F("edAustragungsort0"),
    edAustragungsort1:$F("edAustragungsort1"),
    edAustragungsort2:$F("edAustragungsort2"),
    edSpielstaette:$F("edSpielstaette")
}

Andreas L. 27. Okt 2012 13:03

AW: Quellcode aus TWebBrowser
 
Du kannst das in Delphi umsetzen. Mit TIdHTTP einfach einen POST an /api/fbed/fbedVereinsspielplan.php senden. Die Parameter aus dem JS-Code musst du auch mitgeben. Allerdings musst du erstmal herausfinden wo im JS die Variablen befüllt werden bzw. was deren Inhalt ist.

Parameter:
Code:
edMandant:edMandant,
    edVereinId:edVereinId,
    edDatumVon:$F("edDatumVon"),
    edDatumBis:$F("edDatumBis"),
    edMannschaftChk0:$F("edMannschaftChk0"),
    edMannschaftChk1:$F("edMannschaftChk1"),
    edMannschaften:Object.toJSON(edMannschaften),
    edAustragungsort0:$F("edAustragungsort0"),
    edAustragungsort1:$F("edAustragungsort1"),
    edAustragungsort2:$F("edAustragungsort2"),
    edSpielstaette:$F("edSpielstaette")
EDIT: Welche Parameter genau vom Script übergeben werden kannst du mit z. B. Firebug ziemlich einfach rausfinden.

Bernhard Geyer 27. Okt 2012 13:24

AW: Quellcode aus TWebBrowser
 
Zitat:

Zitat von -remit- (Beitrag 1188617)
MS muss es vorgesehen haben, wie sonst wird der 3. Quellcode generiert?

Über eine Browser-Internes Interface über das nicht externen Zugriff möglich?
Evtl. man die IE-Schnittstelle des IE8 einlesen. Evtl. gibts ja Properties die man im TWebBroser (Müsste IE3-Schnittstelle sein) noch nicht zur Verfügung steht.

-remit- 27. Okt 2012 13:39

AW: Quellcode aus TWebBrowser
 
Danke Andreas, dieser Workaround über den TWebBrowser stört mich schon die ganze Zeit (Bilder die ich nicht brauche werden geladen, nicht plattformunabhängig, Fehler im Javascript beim Ausführen, will manchmal Adobe Flash Player herunterladen usw.). Das Analysieren von Website habe ich noch nicht gemacht, da werde ich mich gleich ransetzen, dazu eine Verständnisfrage bzw. zur "neuen" Funktionsweise meines Programms:
Anstelle der Homepage, die mir den kompletten Inhalt mit Bannern, Werbung etc. auswirft, gehe ich mittels direktem Zugriff auf die php-Datei: htmlcode:=HttpLoader.Get('http://www.meineurl.de/fbedVereinsspielplan.php?edDatumVon=10.10.2012') und erhalte unter umständen kein html-code zurück?

Danke Bernhard für Dein Feedback, die TWebBrowser Komponente ist leider nicht sehr ausgereift. Wenn mein Vorhaben allein mit Indy funktioniert werde ich es darüber ausprobieren.
Vielleicht fällt trozdem jemandem ein, wie man die Schaltfläche "Quellcode anzeigen" ansteuern kann.

lg
Max

Andreas L. 27. Okt 2012 14:00

AW: Quellcode aus TWebBrowser
 
Zitat:

Zitat von -remit- (Beitrag 1188633)
htmlcode:=HttpLoader.Get('http://www.meineurl.de/fbedVereinsspielplan.php?edDatumVon=10.10.2012')

Du musst die Parameter per POST übergeben und nicht via GET.

Delphi-Quellcode:
  Params := TStringList.Create;
  try
    Params.Add('ParamName=ParamValue'); // das = trennt name und value
    htmlcode := httploader.Post(URL, Params);
  finally
    FreeAndNil(Params);
  end;

-remit- 27. Okt 2012 14:14

AW: Quellcode aus TWebBrowser
 
Ich habe jetzt einfach die komplette URL mit den Parametern aus Firebug als Get-Funktion gebastelt und es funktioniert:
Delphi-Quellcode:
url:='http://meineurl.de/api/fbed/fbedVereinsspielplan.php?edMandant=01&edVereinId=03236&edDatumVon=27.10.2012&edDatumBis=26.11.2012'; //da kommen noch 20 weitere Parameter die ich mir hier jetzt schenke
htmlcode:=HttpLoader.Get(url);
Danke für die großartige Hilfe, es erspart mir ca. 100 Zeilen Quellcode, die nervige TWebBrowser Komponente und letzlich auch Programmlaufzeit :)

Dennoch mein Anliegen aus Post 1 ist noch nicht beantwortet, vielleiht kennt jemand eine Methode Quelltext Typ 3 herauszufinden ;)

Andreas L. 27. Okt 2012 15:09

AW: Quellcode aus TWebBrowser
 
Dann akzeptiert das PHP-Script auch GET-Requests. Das JavaScript sendet die Daten aber via POST und so würde ich es auch machen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz