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

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

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?
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
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige