Thema Datum  Von Nutzer Rating
Antwort
01.08.2019 08:52:44 Gast38974
NotSolved
Blau Sitemap VBA
01.08.2019 11:38:34 Gast10230
NotSolved

Ansicht des Beitrags:
Von:
Gast10230
Datum:
01.08.2019 11:38:34
Views:
504
Rating: Antwort:
  Ja
Thema:
Sitemap VBA

Hallo,

 

Zu 1.

Den HTML-Qulltext einer Seite kannst Du mit unten stehendem Makro auslesen. Du hast den dann aber nur als String vorliegen und kannst ihn dann nur mit entsprechenden Methoden weiter verarbeiten. Statt dessen solltest Du Dich mit dem DOM beschäftigen (Document Object Model). Damit kannst Du bereits sehr viel mit den Get-Methoden getElementsByTagName(), getElementsByClassName() und getElementByID() erreichen. Zusätzlich sind die Methoden hasAttribute() und getAttribute() gut zu gebrauchen. Im folgenden Makro wird exemplarisch getElementsByTagName() verwendet (auch wenn nicht selbsterklärend ist, was da eigentlich passiert, zeigt es die Anwendung der Get-Methoden).

Sub HTML_QuellcodeAuslesen()

  Dim url As String
  Dim browser As Object
  Dim knotenWurzel As Object
  Dim htmlQuellCode As String
  
  url = "https://www.heise.de/" '<-- anpassen
  
  'Internet Explorer initialisieren, Sichtbarkeit festlegen,
  'URL aufrufen und warten bis Seite vollständig geladen wurde
  Set browser = CreateObject("InternetExplorer.Application")
  browser.Visible = False
  browser.navigate url
  Do Until browser.ReadyState = 4: DoEvents: Loop
  
  'Über die richtige Get-Methode den alles umfassenden HTML-Tag
  'als DOM-Object speichern
  Set knotenWurzel = browser.document.getElementsByTagName("html")(0)
  
  If Not knotenWurzel Is Nothing Then
    'Konnte das Objekt gebildet werden, den
    'HTML-Quellcode in eine String-Variable
    'speichern
    htmlQuellCode = knotenWurzel.outerHTML
  Else
    'Konnte das Objekt nicht gebildet werden,
    'einen Hinweis ausgeben
    htmlQuellCode = "Kein HTML-Quellcode ausgelesen"
  End If
  
  'Aufräumen
  browser.Quit
  Set browser = Nothing
  Set knotenWurzel = Nothing
  
  'Sichtkontrolle in einer MessageBox
  'Bitte Beachten, dass bei Ausgabe in eine
  'Zelle max. 32.767 Zeichen gespechert werden
  'können. Der Rest verfällt
  MsgBox htmlQuellCode
End Sub

 

Zu 2.

Ich verwende immer late binding, weil solche Makros dann auch automatisch auf anderen Rechnern laufen, ohne Verweise setzen zu müssen. Auf den Luxus von IntelliSense verzichtet man dann in der Tat. Allerdings überwiegen für mich die Vorteile des late bindings. Da ich es nicht getestet habe unter Vorbehalt:

Du brauchst folgenden Verweis, wenn Du early binding verwenden willst: Microsoft Internet Controls

Dann kannst Du den Browser dann folgendermaßen instanzieren: Dim browserAs New InternetExplorer

Unter folgendem Link findest Du die Dokumentation zum DOM. Mach Dich nicht verrückt wegen des Umfangs. Beschäftige dich zuerst mit den Get-Methoden. Dazu die Anmerkung, dass dort zwar auch noch getElementsByName() aufgeführt ist, die Methode ist jedoch "outdatet" (also veraltet) und wird von VBA (dem IE) auch nicht mehr unterstützt.

Links im Menü einfach die Get-Methoden anklicken: https://developer.mozilla.org/de/docs/Web/API/Document

 

Zu 3.

Direkt aus VBA raus kannst Du nur den Internet Explorer ansprechen, weil er der einzige Browser mit COM Schnittstelle ist (Component Object Model). https://de.wikipedia.org/wiki/Component_Object_Model

Chrome müsste über Selenium funktionieren, FireFox ist da grade ausßen vor soweit ich weiß. https://www.seleniumhq.org/

 

Ich hoffe das hilft Dir für den Anfang. Du findest im I-Net sehr viele Beispiele zu Lösungen über das DOM. Es wäre von Vorteil, wenn Du bereits Programmieren kannst, bzw. Dich mindestens mit Programmfluss und Kontrollstrukturen auskennst.

Viele Grüße,

Zwenn


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
01.08.2019 08:52:44 Gast38974
NotSolved
Blau Sitemap VBA
01.08.2019 11:38:34 Gast10230
NotSolved