Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1956to1960
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Links aus Internetseite auslesen

Links aus Internetseite auslesen
08.12.2023 10:10:21
Christian
Hallo,

ich war in der Forumssuche auf der Suche nach einem Makro, welches mir alle Links aus einer Internetseite auflistet und bin auf dieses hier gestoßen und war selbst verblüfft dass es unter Windows 11 mit allen Updates immer noch funktioniert. Ebenfalls fand ich super, was das Makro in Spalte B schreibt, eigentlich hätte ich gedacht ich müsste diese Infos von Hand in Excel kopieren

Aber nun zu meiner Frage.
Gibt es auch eine Möglichkeit in Tabelle2 Spalte A eine Liste mit Internetseiten vorzugeben, die nacheinander abgearbeitet werden sollen, (und die gefundenen Links alle nacheinander aufgelistet) anstatt eine einzige URL ins Makro einzutragen?

Danke für eure Hilfe
Christian

Option Explicit



Public Sub test()
Dim objIE As Object
Dim objLinks As Object
Dim objLink As Object
Dim lngCount As Long
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.navigate "https://"
Do While .busy
Do While .busy
DoEvents
Loop
Loop
.Visible = True
Set objLinks = .Document.Links
For Each objLink In objLinks
lngCount = lngCount + 1
Cells(lngCount, 1) = objLink.href
Cells(lngCount, 2) = "'" & objLink.outertext
Next
.Quit
End With
Set objIE = Nothing
End Sub

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Links aus Internetseite auslesen
08.12.2023 12:28:23
Yal
Hallo Chirstian,

Du brauchtst eine Schleife, die über deine vorgegeben Adresse durchläuft.
Ich würde die Handlungen voneinander trennen:

Sub Liste_lesen()

Dim Adresse
Dim Erg

With Worksheets("Tabelle2")
'Schleife über die Vorgaben
For Each Adresse In Range(.Range("A1"), .Range("A99999").End(xlUp))
'Schleife über die Rückgabe
For Each Erg In LinksListe(Adresse.Value)
With .Range("D99999").End(xlUp) 'Herausgabe in Spalte D, E, F
.Offset(1, 0).Value = Adresse.Value 'die Quelle
.Offset(1, 1).Value = Erg.Href 'der Link
.Offset(1, 2).Value = Erg.OuterText 'der Text
End With
Next
Next
End With
End Sub

Public Function LinksListe(ByVal Adresse As String)
With CreateObject("InternetExplorer.Application")
.navigate Adresse
Do While .busy
DoEvents
Loop
.Visible = True
Set LinksListe = .Document.Links
.Quit
End With
End Function
ungetestet.

VG
Yal
Anzeige
AW: Links aus Internetseite auslesen
08.12.2023 12:39:37
Christian
Hallo Yal, schonmal danke erstmal für deine Mühe.

Hier mal eine Testdatei

https://www.herber.de/bbs/user/164941.xlsm

Mein Makro funktioniert, indem ich die Adresse direkt eintrage.

Bei deinem Makro ist es leider so, dass er aus irgendeinem Grund sagt, Zugriff verweigert.
Bei Einzelschrittausführung kommt eine andere Meldung, dass der Remoteserver nicht erreichbar sei, obwohl in einem Schritt davor die Internetseite noch geöffnet wurde.
Ich kann es mir nicht erklären, wo da der Fehler liegt.

Gruß
Christian



Anzeige
Hat niemand eine Idee owt?
08.12.2023 17:13:58
Christian
.
AW: Hat niemand eine Idee owt?
08.12.2023 18:09:26
Oberschlumpf
Hi Christian,

ich hab diese 3 Links in Spalte A, ab Zeile 1, getestet:
https://google.de
https://gmx.de
https://herber.de

Versuch es mal mit diesem Code:


Public Sub test()
Dim objIE As Object
Dim objLinks As Object
Dim objLink As Object
Dim lngCount As Long

Dim lloRow As Long, lshTab2 As Worksheet

Set lshTab2 = Sheets("Tabelle2")

For lloRow = 1 To lshTab2.Cells(lshTab2.Rows.Count, 1).End(xlUp).Row
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.navigate lshTab2.Range("A" & lloRow).Hyperlinks(1).Address
Do While .busy
Do While .busy
DoEvents
Loop
Loop
.Visible = False
Set objLinks = .Document.Links
For Each objLink In objLinks
lngCount = lngCount + 1
lshTab2.Cells(lngCount, 2) = objLink.href
lshTab2.Cells(lngCount, 3) = "'" & objLink.outertext
Next
.Quit
End With
Next

Set objIE = Nothing
Set lshTab2 = Nothing

End Sub

Hilfts?
Nein? Dann weiß ich leider auch nicht weiter.

Ciao
Thorsten
Anzeige
AW: Hat niemand eine Idee owt?
08.12.2023 18:31:15
Christian
Hallo Thorsten,

werde mich gleich ans testen begeben.

Ein kleiner Hinweis zuvor noch zu Yals Makro. In der Zwischenzeit habe ich herausgefunden, dass es funktioniert, wenn ich das Quit weglasse.
Ok, es funktioniert für ca. 120 Internetseiten, die jeweils ca. 380 Links haben, danach kommt ein unbekannter Systemfehler. Diesen vermute ich mit meinem Laienwissen irgendwo da, dass sich dann auch 120 Browserfenster geöffnet haben da sie ja nicht geschlossen wurden und da dann irgendwann einfach der Browser nicht mehr mitgemacht hat.

Das schonmnal als Info. Ich werde dann jetzt dein Makro testen und mich dann gleich melden.

Christian
Anzeige
AW: Hat niemand eine Idee owt?
08.12.2023 18:54:13
Jan
Hallo

Mit PQ könnte der Anfang so aussehen mit den Links von Thorsten


let
LS = Excel.CurrentWorkbook () {[Name = "Tabelle1"]} [Content],
GT = Table.TransformColumnTypes (LS, {{"Spalte1", type text}}),
RV = Table.ReplaceValue(GT,"""","",Replacer.ReplaceText,{"Spalte1"}),
HbS = Table.AddColumn (RV, "Link öffnen", each Web.Page ([Spalte1]))
in
HbS
AW: Hat niemand eine Idee owt?
08.12.2023 19:00:07
Christian
Hallo Jan,

erstmal danke für deinen Hinweis.
Ich stehe leider schon bei Thorstens Makro vor dem Problem. In meiner Tabelle liegen die URL's nur als Text vor, also ohnen hinterlegte URL als Hyperlink. Dein Vorschlag bringt mich zwar in beiden Fällen also mit und ohne den Hyperlinks zu demselben Ergebnis. Jedoch fehlen mir die PQ Kenntnisse wie ich dann mit deinem Vorschlag weiter verfahren muss, um zu den einzelnen Links zu kommen (ca. 380 auf jeder einzelnen der zu öffnenden Seiten).

Gruß
Christian

Anzeige
AW: Hat niemand eine Idee owt?
08.12.2023 18:46:02
Christian
Hallo Thorsten,

sorry dass ich mich vorhin nicht bedankt habe, ich hoffe du siehst es mir nach dass ich es erst jetzt tue.

Ich bekomme leider die Meldung "Index außerhalb des gültigen Bereichs". Ich habe auch eine Vermutung woran es liegt.
In Spalte A stehen bei mir mur die URL als Text. Es ist kein Hyperlink mit der URL hinterlegt. Hinterlege ich diesen funktioniert es. Aber das bei 800 Adressen händisch zu hinterlegen, ist ein immenser Aufwand.
LÄsst sich da nicht seitens des Makros noch eine Anpassung vornehmen?

Hier noch eine Datei wie ich es meine zum hoffentlich besseren Verständnis. Wenn du da Einzelschritte ausführst, siehst du dass der Link in A1 abgearbeitet wird und dann bei A2 in der Zeile .navigate lshTab2.Range("A" & lloRow).Hyperlinks(1).Address der Fehler kommt, ich vermute mal weil in A2 keine Hyperlink Adresse hinterlegt ist.

Bist du bitte so nett und passt dein Makro nochmal dahingehend an?

Gruß
Christian

https://www.herber.de/bbs/user/164946.xlsm
Anzeige
AW: Hat niemand eine Idee owt?
09.12.2023 14:42:59
Yal
Hallo Christian,

ja, jetzt sehe ich meine Denkfehler: da ich die Verarbeitung in 2 Prozuderen teile, kann man nicht in die Haupt-Sub auf dem Inhalt eines Objekts zugreifen, das bereits geschlossen wurde (quit).
Entweder bringt man wieder die beiden Teil zusammen, oder listet man die Links auf, bevor der quit ausgeführt wird.

VG
Yal
AW: Hat niemand eine Idee owt?
09.12.2023 15:57:22
Christian
Hallo Yal,

danke dass du dich dem nochmal angenommen und es mir erklärt hast.
Habe jetzt allerdings längst Thorstens Makro genommen und die Daten so aufbereitet wie ich sie brauche, sprich die Liste mit den Links existiert nicht mehr.

Auf jedenFall nochmal danke und ein schönes Wochenende
Christian
Anzeige
manchmal sieht man...
08.12.2023 19:08:52
Christian
... den Wald vor lauter Bäumen nicht.

Hab einfach entsprechende Zeile in

.navigate lshTab2.Range("A" & lloRow).Text

anstatt hyperlink Adress geändert.

Erster Test hat geklappt, jetzt kommt noch der ausführliche Test mit mehr als deinen 3 Links.

Gruß
Christian
so wie es aussieht funktioniert es, danke owT
08.12.2023 19:28:54
Christian
.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige