Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA HTML/Java Inhalt der Website kopieren

VBA HTML/Java Inhalt der Website kopieren
17.02.2019 10:45:52
Christoph
Hi Leute,
hoffe ihr könnt mir helfen.
Ich habe ein Makro, das erst den Hyperlink in einer Zelle aufruft und anschließend ein Class Element aus der Seite zieht.
Mein Problem ist, dass ich so nicht den kompletten Inhalt erhalte, sondern irgendwann der Text abgehackt ist. Meine Vermutung war, dass die Seite über Javascript läuft und erst den Inhalt laden muss, daher die Zeile in dem Code, um nach unten zu Scrollen. Allerdings erhalte ich trotzdem nur die ersten 3/4 des Inhalts.
Hier der Code:
Public Sub test()
Dim Zelle As Range
Dim objIE As Object
Dim Ding
Set objIE = CreateObject("Internetexplorer.Application")
With objIE
On Error Resume Next
.Visible = True
For Each Zelle In Range("A2:A5")
.navigate2 Zelle.Text
.document.parentWindow.Scroll 0&, 3000&
Do While .Busy
Do Until objIE.ReadyState = 4
DoEvents
Loop
Loop
Sleep 2000
.document.parentWindow.Scroll 0&, 2000&
On Error Resume Next
For Each Ding In objIE.document.all
If Ding.getAttribute("class") = "leftInnerProfilFirst" Then
Zelle.Offset(0, 1) = Ding.innertext
End If
Next
Next
.Quit
On Error Resume Next
End With
Set objIE = Nothing
End Sub

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA HTML/Java Inhalt der Website kopieren
17.02.2019 13:26:43
Zwenn
Hallo Christoph,
bin unterwegs, deshalb nur kurz via Smartphone. Schmeiß den ganzen on error Müll ersatzlos raus und google getElementsByClassName(). Ich habe gestern Nacht hier im Forum eine Lösung gepostet, um einen Link aus HTML zu holen. Da verwende ich unter anderem auch getElementsByClassName().
Wenn der Text unvollständig ist, steht er entweder nicht ganz im 'ausgeschnittenen' HTML-Ausschnitt, oder er hat mehr als 32tsd irgendwas Zeichen. Das ist das Maximum, das eine Excel-Zelle aufnehmen kann.
Für weitere Hilfe durch andere musst du den Link posten pder wenigstens den HTML-Quelltext der Seite als txt-Datei hier hochladen.
Viele Grüße,
Zwenn
Anzeige
AW: VBA HTML/Java Inhalt der Website kopieren
17.02.2019 14:23:31
Christoph
Hallo Zwen,
erstmal vielen Dank für die Antwort.
Ob ich über Class oder Atribute definiere, führt zum selben Ergebnis.
Der aktuelle Ausschnitt liegt bei ca. 6.000 bis 8.000 Zeichen, also noch nicht nahe am Limit.
Was sonst eine alternative wäre, wäre über Sendkeys STRG+A, STRG+C und anschließend STRG+V. Allerdings habe ich es hier nicht geschafft den Inhalt nur die Zelle.Offset (0,1) zu kopieren, sondern nur ActiveSheet.Paste, was dazu führt, dass mehrere hundert Zeilen belegt werden.
Könntest du mir damit eventuell helfen?
Anzeige
AW: VBA HTML/Java Inhalt der Website kopieren
18.02.2019 00:16:20
Zwenn
Hallo Christoph,
wie gesagt, ich bin unterwegs. Strg+a klingt für mich nicht danach, dass sich der gewünschte Inhalt in einem HTML-Abschnitt befindet, den man über getElementsByClassName() abgreift. Damit markierst du ja den gesamten Seiteninhalt.
Wenn es so ist, dann versuche Dein 'Glück' mal mit getElementsByTagName(“body“)(0) Sendkeys würde ich nur in Ausnahmefällen einsetzen. Einfügen müsste dann nicht ins Blatt, sondern in eine Zelle erfolgen. ActiveSheet.Cells(1,1).paste oder sowas in die Richtung.
Wie lautet denn der Link zu der Seite oder der Quellcode der Seite?
Viele Grüße,
Zwenn
Anzeige
AW: VBA HTML/Java Inhalt der Website kopieren
18.02.2019 22:11:21
Christoph
Hi Zwenn,
vielen Dank für die Antworten.
Es ist diese Seite: www.hoppenstedt-firmendatenbank.de/firmenprofil/500000355924/Softing-AG.html
Über GetElementsByTagName("body")(0) laufen einmal alle Elemente durch die ausgewählte Zelle, aber am Ende bleibt nur der Text "[Textfarbe]" stehen.
Für meine Zwecke muss es erst einmal funktionieren, verschlanken/optimieren des Codes geht später auch noch, deshalb ist Sendkeys auch eine Alternative. Hier mein Code dafür. Es scheitert nur an der letzten Hürde, den Inhalt in das Tabellenblatt zu bringen, in der Zwischenablage steckt er schon.
Option Explicit
Private Declare PtrSafe Sub Sleep Lib "kernel32.dll" ( _
ByVal dwMilliseconds As Long)
Public Sub test()
Dim Zelle As Range
Dim objIE As Object
Dim Ding
Set objIE = CreateObject("Internetexplorer.Application")
With objIE
On Error Resume Next
' .Visible = True
For Each Zelle In Range("A2:A2")
.navigate2 Zelle.Text
.document.parentWindow.Scroll 0&, 3000&
Do While .Busy
Do Until objIE.ReadyState = 4
DoEvents
Loop
Loop
Sleep 2000
.document.parentWindow.Scroll 0&, 2000&
On Error Resume Next
'Copy All Data in Internet Window
SendKeys "^{a}"
Application.Wait Now + TimeSerial(0, 0, 2)
SendKeys "^{c}"
Application.Wait Now + TimeSerial(0, 0, 2)
Zelle.Offset(0, 1).Activate
SendKeys "{^v}"
Next
.Quit
On Error Resume Next
End With
Set objIE = Nothing
End Sub

Anzeige
AW: VBA HTML/Java Inhalt der Website kopieren
18.02.2019 22:56:23
Zwenn
Hallo Christoph,
bist Du auf der Seite eingeloggt? Ich bekomme nur einen weißen Bereich unter drei Menüleisten auf einem blauen Hintergrund angezeigt. Wenn der von Dir beschriebene Text in einem Tag mit der CSS Klasenzuweisung leftInnerProfilFirst steht, dann kannst Du darauf direkt zugreifen mit:

Public Sub test()
Dim Zelle As Range
Dim objIE As Object
Dim Ding As Object
Set objIE = CreateObject("Internetexplorer.Application")
objIE.Visible = True
For Each Zelle In Range("A2:A5")
objIE.navigate Zelle.Value
Do Until objIE.ReadyState = 4: DoEvents: Loop
Set Ding = objIE.document.getElementsByClassName("leftInnerProfilFirst")(0)
If Not Ding Is Nothing Then
Zelle.Offset(0, 1).Value = Ding.innertext
Else
Zelle.Offset(0, 1).Value = "Nix gefunden"
End If
Next
objIE.Quit
Set objIE = Nothing
Set Ding = Nothing
End Sub

Ohne Seitenquelltext kann ich dazu nicht mehr sagen.
Um Text aus der Zwischenablage in einen einzigen String zu schreiben, schau mal hier nach:
http://www.online-excel.de/excel/singsel_vba.php?f=28
Viele Grüße,
Zwenn
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA zur automatischen Datenübertragung von Webseiten


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und aktiviere die Entwicklertools: Gehe zu Datei > Optionen > Menüband anpassen und aktiviere die Entwicklertools.

  2. Füge ein neues Modul hinzu: Klicke im VBA-Editor mit der rechten Maustaste auf VBAProject (DeinWorkbook) > Einfügen > Modul.

  3. Kopiere den folgenden VBA-Code in das Modul:

    Public Sub test()
        Dim Zelle As Range
        Dim objIE As Object
        Dim Ding As Object
        Set objIE = CreateObject("Internetexplorer.Application")
    
        objIE.Visible = True
    
        For Each Zelle In Range("A2:A5") 'Bereich anpassen
            objIE.navigate Zelle.Value
            Do Until objIE.ReadyState = 4: DoEvents: Loop
    
            Set Ding = objIE.document.getElementsByClassName("leftInnerProfilFirst")(0)
            If Not Ding Is Nothing Then
                Zelle.Offset(0, 1).Value = Ding.innertext
            Else
                Zelle.Offset(0, 1).Value = "Nix gefunden"
            End If
        Next
    
        objIE.Quit
        Set objIE = Nothing
        Set Ding = Nothing
    End Sub
  4. Anpassen des Bereichs: Ändere Range("A2:A5") auf den Bereich, in dem sich deine Links befinden.

  5. Führe das Makro aus: Gehe zu Entwicklertools > Makros und wähle test aus. Klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Problem: Unvollständiger Text wird abgerufen.

    • Lösung: Überprüfe, ob der gesamte Text im HTML-Dokument vorhanden ist. Verwende getElementsByClassName oder getElementsByTagName, um sicherzustellen, dass du den richtigen Inhalt abrufst.
  • Problem: "Nix gefunden" wird angezeigt.

    • Lösung: Stelle sicher, dass die Klasse leftInnerProfilFirst tatsächlich in der HTML-Struktur vorhanden ist. Du kannst den Quellcode der Seite überprüfen, um die genauen Klassennamen zu bestätigen.
  • Problem: Fehler beim Zugriff auf die Webseite.

    • Lösung: Stelle sicher, dass du bei der Webseite eingeloggt bist, wenn dies erforderlich ist.

Alternative Methoden

  • Verwendung von SendKeys: Wenn du den gesamten Inhalt der Webseite kopieren möchtest, kannst du SendKeys verwenden, um STRG+A und STRG+C zu simulieren. Beachte jedoch, dass dies ungenau sein kann und nicht empfohlen wird, es sei denn, es gibt keine andere Möglichkeit.

    SendKeys "^{a}"
    Application.Wait Now + TimeSerial(0, 0, 2)
    SendKeys "^{c}"
  • Direktes Arbeiten mit dem HTML-Dokument: Wenn du mit HTML-Elementen arbeitest, nutze getElementsByTagName oder getElementsByClassName, um gezielter auf den Inhalt zuzugreifen.


Praktische Beispiele

Hier sind einige Beispiele, wie du den Inhalt von Webseiten abrufen kannst:

  1. Beispiel für die firmendatenbank hoppenstedt: Wenn du Daten von der Hoppenstedt Firmendatenbank abrufen möchtest, kannst du den oben genannten Code anpassen, um die Klassen zu verwenden, die spezifisch für diese Webseite sind.

  2. HTML Beispiele zum Kopieren: In der Regel kannst du auch die innerHTML-Eigenschaft verwenden, um den gesamten HTML-Inhalt eines Elements zu kopieren, statt nur den Text.

    Zelle.Offset(0, 1).Value = Ding.innerHTML

Tipps für Profis

  • Fehlerbehandlung: Verwende On Error Resume Next mit Bedacht, um Fehler zu ignorieren, aber stelle sicher, dass du sie auch protokollierst, um spätere Probleme zu vermeiden.

  • Optimierung der Geschwindigkeit: Setze objIE.Visible = False, um den Browser im Hintergrund laufen zu lassen und die Ausführungsgeschwindigkeit zu erhöhen.

  • CSS-Klassen: Nutze vba css zur gezielten Ansprache von Elementen. Wenn du die Struktur der Webseite kennst, kannst du gezielt nach Klassen oder IDs suchen, um die Leistung zu optimieren.


FAQ: Häufige Fragen

1. Wie kann ich die Webseite kopieren, ohne sie manuell zu besuchen? Du kannst VBA verwenden, um die URL direkt anzusprechen und den Inhalt abzurufen, ohne den Browser manuell zu öffnen.

2. Was kann ich tun, wenn die Webseite JavaScript verwendet? Wenn die Webseite JavaScript verwendet, kann es notwendig sein, eine Bibliothek wie Selenium zu verwenden, um mit dynamischen Inhalten umzugehen.

3. Gibt es eine maximale Anzahl von Zeichen, die ich in eine Excel-Zelle eingeben kann? Ja, eine Excel-Zelle kann maximal 32.767 Zeichen aufnehmen. Achte darauf, dass der abgerufene Inhalt dieses Limit nicht überschreitet.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige