Chromium Label /Text von Webseite auslesen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.

Chromium Label /Text von Webseite auslesen

Beitragvon lazarusjulian » 2. Jul 2016, 19:50 Chromium Label /Text von Webseite auslesen

Hallo,

ich habe mir nach dieser Anleitung die Chromium Komponente installiert
http://lazplanet.blogspot.de/2015/09/cr ... using.html
und würde nun gerne bestimmte Informationen von der geladenen Webseite auslesen, am besten geht das wohl über die ID des Elements..
Wie kann ich das auslesen ?

Mit Javascript bekomm ich es hin, habe aber keine Ahnung, wie ich den Output vom Javascript an mein Programm geben könnte.
Code: Alles auswählen
 
  chromium.Browser.MainFrame.ExecuteJavaScript('var t=document.getElementById("position-3873").textContent','',0);
  chromium.Browser.MainFrame.ExecuteJavaScript('alert(t)','',0);     
 


Kann Jemand helfen ?? =)
lazarusjulian
 
Beiträge: 24
Registriert: 6. Jan 2016, 21:45

Beitragvon theo » 3. Jul 2016, 11:51 Re: Chromium Label /Text von Webseite auslesen

Gibt es einen Grund, warum das zuerst in den Webbrowser muss?
Kannst du nicht einfach das HTML downloaden und auswerten?
theo
 
Beiträge: 8058
Registriert: 11. Sep 2006, 18:01

Beitragvon lazarusjulian » 3. Jul 2016, 16:51 Re: Chromium Label /Text von Webseite auslesen

theo hat geschrieben:Gibt es einen Grund, warum das zuerst in den Webbrowser muss?
Kannst du nicht einfach das HTML downloaden und auswerten?


Ja :mrgreen:

Ich baue mir einen Web Bot, und da fände ich es umständlich die Seite nochmals runterzuladen. Zumal Teile der Seite erst nach Login sichtbar sind.

cheers, Julian
lazarusjulian
 
Beiträge: 24
Registriert: 6. Jan 2016, 21:45

Beitragvon Michl » 3. Jul 2016, 21:38 Re: Chromium Label /Text von Webseite auslesen

Habe es eben bei mir probiert und funktioniert reduziert so:
Code: Alles auswählen
type
  TCustomRenderProcessHandler = class(TCefRenderProcessHandlerOwn)
  protected
    function OnProcessMessageReceived(const browser: ICefBrowser; sourceProcess: TCefProcessId;
      const message: ICefProcessMessage): Boolean; override;
  end;
...
procedure VisitDOM(const Document: ICefDomDocument);
begin
  WriteLn(Document.GetElementById('...').ElementInnerText);
end;
 
function TCustomRenderProcessHandler.OnProcessMessageReceived
  (const browser: ICefBrowser; sourceProcess: TCefProcessId;
  const message: ICefProcessMessage): Boolean;
begin
  case message.Name of
    'visitdom':
      begin
        browser.MainFrame.VisitDomProc(@VisitDOM);
        Result := True;
      end;
    else
      Result := inherited;
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Chromium.Browser.SendProcessMessage(PID_RENDERER,TCefProcessMessageRef.New('visitdom')) then
    WriteLn('Triggered DOM visit.')
  else
    WriteLn('Failed to start DOM visit.');
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  CefRenderProcessHandler := TCustomRenderProcessHandler.Create;
end
Die ausführlichere, bessere Variante ist bei FPCEF3 im Ordner Examples\DOMAccess zu finden.
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2260
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon lazarusjulian » 19. Feb 2018, 17:28 Re: Chromium Label /Text von Webseite auslesen

Es kommt zwar leider viiiiiel zu spät, aber DANKE!!! @Michl

Ich hatte das Projekt damals nicht weiter verfolgt und Michls Ansatz nicht verstanden (obwohl c&p es auch getan hätte, Asche auf mein Haupt).
Probiere aber gerade mal wieder was ähnliches in die Richtung.

Im übrigen habe ich noch einen weiteren Ansatz gefunden,
und zwar einfach den HTML-Sourcecode auszulesen und daraus dann meine Informationen zu suchen.
Das funktioniert aber nicht, wenn die Darstellung der Seite aus Javascript zusammen gebaut wurde. (Bsp: https://accounts.google.com/signin )
Da ist Michls Lösung dann eindeutig die bessere Wahl.

Rein der Vollständigkeit halber aber hier nochmal die Lösung für das Auslesen des HTML-Quellcodes:

Code: Alles auswählen
 
procedure CallbackGetSource(const src: ustring); // CallbackGetSource is fired after the end of ChromiumLoadEnd procedure
begin
  Form1.memo1.text := src; //HTML page code is in src
end;
 
 
procedure TForm1.ChromiumLoadEnd(Sender: TObject; const Browser: ICefBrowser;
  const Frame: ICefFrame; httpStatusCode: Integer);
begin
  chromium.Browser.MainFrame.GetSourceProc(@CallbackGetSource);
end;
 
lazarusjulian
 
Beiträge: 24
Registriert: 6. Jan 2016, 21:45

• Themenende •

Zurück zu Sonstiges



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste

porpoises-institution
accuracy-worried