AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Prüfen ob ein OleVariant verfügbar ist?

Prüfen ob ein OleVariant verfügbar ist?

Ein Thema von SearchBot · begonnen am 20. Nov 2018 · letzter Beitrag vom 21. Nov 2018
Antwort Antwort
SearchBot

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
232 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Prüfen ob ein OleVariant verfügbar ist?

  Alt 20. Nov 2018, 16:40
Delphi-Version: 10.1 Berlin
Hallo,

ich mache gerade mit dem TWebbrowser herum.

Ich möchte auf einer Webseite die Werte bestimmter IDs abfragen. Diese stehen nicht immer in in der Tag-Eigenschaft 'value', sondern auch mal im Text selbst.
Um die richtige Auswahl zu treffen, sage ich der Function, von wo ich den Wert haben möchte.
Ich taste mich langsam vor, ob es einen Bezug auch wirklich gibt - oder muss ich mir keine Gedanken machen?

Jetzt knallt mir der Debugger aber so "EVariantInvalidOpError" um die Ohren (ungültige Variantenoperation) - das Konzept mit den Varianten oder OleVarianten ist mir nur vage geläufig

Letzter Stand von meines Try'n'Error:

Delphi-Quellcode:
 function GetById(id:string; by:shortstring):string;
 var V:Variant; O:OleVariant;
 begin
  result:='';
  V:=Form1.Webbrowser1.OleObject; //will zunächst wissen, ob nachfolgende Abfragen Sinn machen
  if V<>NULL then begin //geht nicht mit NULL, auch nicht mit NIL, auch nicht mit 0 - ja wie denn dann?
     O:=V.Document; //Document überhaupt da?
     if O<>Null then O:=V.Document.GetElementById(id); // dann nach der Id sehen
     if (O<>Null) then begin
      if by='innerTextthen result:=O.innerText;
      if by='value'     then result:=O.value;
      if by='innerHTMLthen result:=O.innerHTML;
     end;
  end;
 end;
Gibt es nebenbei auch eine elegantere Möglichkeit auf die HTML-Objekteigenschaften zuzugreifen anstelle meiner "if by=.. then.."-Abfragen? Irgendwie so O.object['value']?
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
2.636 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Prüfen ob ein OleVariant verfügbar ist?

  Alt 20. Nov 2018, 16:45
Ich empfehle Dir mal Dir das hier anzuschauen.

Eine Antwort auf Deine Frage habe ich erstmal nicht, tut mir leid.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
7.948 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Prüfen ob ein OleVariant verfügbar ist?

  Alt 20. Nov 2018, 17:40
Delphi-Quellcode:
 
  if V<>NULL then begin //geht nicht mit NULL, auch nicht mit NIL, auch nicht mit 0 - ja wie denn dann?
Vielleicht sind Abfragen mit VarIsNull, VarIsEmpty oder VarIsClear hier zielführender.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.388 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Prüfen ob ein OleVariant verfügbar ist?

  Alt 20. Nov 2018, 18:18
Egal ob das wirklich 100%ig zur Frage passt oder nicht, da gibt es ja viel interessanten Stoff. Danke für den Tipp 👍
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
2.636 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Prüfen ob ein OleVariant verfügbar ist?

  Alt 20. Nov 2018, 18:33
Egal ob das wirklich 100%ig zur Frage passt oder nicht, da gibt es ja viel interessanten Stoff. Danke für den Tipp 👍
Ja okay, ich hab vergessen zu notieren das sich dahinter eine Seite verbirgt die einem Rund ums Thema WebBrowser glücklich machen könnte und gern geschehen
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
SearchBot

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
232 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Prüfen ob ein OleVariant verfügbar ist?

  Alt 21. Nov 2018, 11:09
Hey

Aus der Kombination der Möglichkeiten habe ich meine Function jetzt zum Laufen bekommen:
Delphi-Quellcode:
 function GetById(id:string; by:shortstring):string;
 var V:Variant; O:OleVariant;
  D: IHTMLDocument2;
 begin
  result:='';
  D := Form1.WebBrowser1.Document as IHTMLDocument2;
  if D<>nil then
  if D.readyState='completethen begin
    V:=Form1.Webbrowser1.OleObject;
    if not VarIsEmpty(V) then begin
     O:=V.Document;
     if not VarIsNull(O) then begin
      O:=O.GetElementById(id);
      if (not VarIsEmpty(O)) and (by<>'') then begin
        if by='innerTextthen result:=O.innerText;
        if by='value'     then result:=O.value;
        if by='innerHTMLthen result:=O.innerHTML;
      end else result:='true'; //für die Abfrage, ob es die gewünschte ID überhaupt gibt
      //Ergebnis also ''=nicht da, 'true'=ID da, oder der Wert der ID (ich weiß, wie die Seite aufgebaut ist)
     end;
    end;
  end;
 end;
Sieht zwar immer noch etwas gemurkst aus, aber läuft

Danke für Eure Hilfe!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf