Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1700to1704
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

Website auslesen

Website auslesen
02.07.2019 12:47:21
Bahar
Hallo Leute!
Ich bin absoluter Anfänger in VBA. Auf meiner Arbeit bin ich aber die einzige Person die sich für so etwas interessiert, und habe mich daher der Pflege von unseren Makros angenommen.
Ein Makro übersteigt mein Wissen aber um Weiten. Daher brauche ich eure Hilfe.
Es geht um das Ermitteln des zuständigen Finanzamts und automatische Einfügung der Adresse in das Adressfeld unserer Schreiben. Die Website wurde allerdings umgestaltet und nun passt unser Makro nicht mehr. Ich habe es versucht anzupassen, scheiter aber ab einem gewissen Punkt.
Aktuell sieht das Makro so aus:
Public Function html_auslesen(PLZ)
On Error GoTo FEHLER
'Per VBA eine IE-Applikation erzeugen
Dim IEApp As Object
Dim IE_Document As Object
Dim strSuche, strSuche2, SuchePLZ, FA_ANSCHRIFT As String
Dim FA_POSITION, FA_POSITION_ENDE As Integer
Dim a_Strasse As String
Dim a_PLZundORT As String
Dim a_ORT As String
strSuche = "http://www.bzst.de/DE/Service/Behoerdenwegweiser/Finanzamtsuche/GemFa/ _
finanzamtsuche_Formular.html?nn=95918&resourceId=95914&input_=95918&pageLocale=de&suche="
strSuche2 = "&suchePrefix=&submit.x=0&submit.y=0"
SuchePLZ = PLZ
strSuche = strSuche & SuchePLZ & strSuche2
'Neues Browser-Objekt erzeugen
Set IEApp = CreateObject("InternetExplorer.Application")
'Browser versteckt ausführen (höhere Geschwindigkeit)
IEApp.Visible = True
' HTML-Datei aufrufen
IEApp.navigate strSuche
'Seite wieder in eine Variable holen
Do
Call warte(2)
Loop Until IEApp.Busy = False
Set IEDocument = IEApp.Document
'Quellcode in als String einlesen
Dim Sourcecode As String
Sourcecode = IEDocument.body.innerHTML
'Sourcecode aufsplitten nach 
Dim SplitArrayOrt As Variant
SplitArrayOrt = Split(Sourcecode, "")
Dim a_BEGINN As Integer
a_BEGINN = InStr(1, SplitArrayOrt(1), "")
a_ORT = Mid(SplitArrayOrt(7), a_BEGINN + 1, Len(SplitArrayOrt(7)) - a_BEGINN + 1)
'Fund aufsplitten und Anschrift auslesen
Dim SplitArray As Variant
' leitet in HTML eine Table-Row ein.. Also eine Tabellenzeile!
SplitArray = Split(SplitArrayOrt(7), "

") 'MsgBox Len(SplitArray(0)) a_Strasse = Mid(SplitArray(1), 1, Len(SplitArray(1)) - 200) a_PLZundORT = Mid(SplitArray(1), 51, Len(SplitArray(1)) - 210) 'Ausgabe der vollen Anschrift html_auslesen = a_ORT & vbCrLf & _ a_Strasse & vbCrLf & _ a_PLZundORT 'IE schließen IEApp.Quit Set IEApp = Nothing Exit Function 'Fehler: FEHLER: MsgBox "Es konnte kein Finanzamt zu der angegebenen PLZ " & PLZ & " ermittelt werden." 'IE schließen IEApp.Quit Set IEApp = Nothing End Function
____________________________________________________
Den Quellcode der Website findet ihr hier:
http://www.bzst.de/DE/Service/Behoerdenwegweiser/Finanzamtsuche/GemFa/finanzamtsuche_Formular.html?nn=95918&resourceId=95914&input_=95918&pageLocale=de&suche=81675&suchePrefix=&submit.x=12&submit.y=16
Die Adresse, die ich haben will befindet sich in den Zeilen 348, 349.
__________________________________________________________________
Im Word-Dokument erscheint bei manchen Finanzämtern dann gar keine Adresse (wurde wohl nicht gefunden) oder der Quelltext (am Beispiel des o.g. Finanzamts) von Zeile 347 bis 362.
Könnt ihr mir helfen?
Ich habe an allen möglichen Variablen herumgeschraubt um zu sehen was sich verändert. Aber ich weiß wirklich nicht mehr weiter, was ich noch tun könnte.
Danke!

AW: MSXML2
Fennek

Hallo,
nach einem ersten Blick in den Quellcode sollte es mit MSXML auslesbar sein. Aber so einen Code zu entwickeln, dauert für mich zu lange für eine kostenlose Hilfestellung.
mfg
AW: Website auslesen
Zwenn

Hallo Bahar,
die Erklärung spare ich mir für den Moment mal. Aber für meine PLZ kommst Du mit folgender Funktion an die Anschrift des zuständigen Finanzamtes:
(Die Zeilenumbrüche im Makro musst Du wieder entfernen, die stammen von der Forensoftware)

Public Function html_auslesen(PLZ As String) As String
'Konstante für Grund-URL mit Parameter ohne Wert für die PLZ
Const grundURL As String = "http://www.bzst.de/DE/Service/Behoerdenwegweiser/Finanzamtsuche/ _
GemFa/finanzamtsuche_Formular.html?suche="
'Variablen Für Internetzugriff und Adresse
Dim browser As Object
Dim urlPLZ As String
Dim url As String
Dim knotenRichtigerHtmlAusschnitt As Object
Dim knotenFinanzamt As Object
Dim knotenAdresse As Object
Dim anschrift As String
Dim auslesenErfolgreich As Boolean
'URL zusammenbauen und Ausleseerfolg voraussetzen
urlPLZ = PLZ
url = grundURL & urlPLZ
auslesenErfolgreich = True
'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
'Manuelle Wartezeit, damit Inhalte von der Webseite nachgeladen werden können
'Application.Wait (Now + TimeSerial(pause_stunden, pause_minuten, pause_sekunden))
Application.Wait (Now + TimeSerial(0, 0, 5))
'HTML-Ausschnitt mit den gewünschten Daten isolieren
Set knotenRichtigerHtmlAusschnitt = browser.document.getElementsByClassName("row collapse")(1) _
If Not knotenRichtigerHtmlAusschnitt Is Nothing Then
'Finanzamt Name holen
Set knotenFinanzamt = knotenRichtigerHtmlAusschnitt.getElementsByClassName("l- _
headline__line--1")(0)
If Not knotenFinanzamt Is Nothing Then
'Wurde das HTML-Element mit dem Namen des Finanzamtes gefunden, Name auslesen
anschrift = Trim(knotenFinanzamt.innertext)
Else
'Wurde das HTML-Element mit dem Namen des Finanzamtes nicht gefunden, kein Ausleseerfolg
auslesenErfolgreich = False
End If
'Adresse holen
Set knotenAdresse = knotenRichtigerHtmlAusschnitt.getElementsByTagName("p")(0)
If Not knotenAdresse Is Nothing Then
'Gibt es ein erstes p-Tag, den Text daraus als Adresse auslesen
anschrift = anschrift & Chr(13) & Trim(knotenAdresse.innertext)
Else
'Gibt es kein erstes p-Tag, kein Ausleseerfolg
auslesenErfolgreich = False
End If
Else
'Gibt es keinen eingrenzenden HTML-Abschnitt, kein Ausleseerfolg
auslesenErfolgreich = False
End If
'Aufräumen
browser.Quit
Set browser = Nothing
Set knotenRichtigerHtmlAusschnitt = Nothing
Set knotenFinanzamt = Nothing
Set knotenAdresse = Nothing
If auslesenErfolgreich Then
'Konnten Name des Finanzamts und die Adresse ausgelesen werden, Anschrift zurückliefern
html_auslesen = anschrift
Else
'Konnten Name des Finanzamts und die Adresse ausgelesen werden, Text aus alter Funktion zurü _
ckliefern
html_auslesen = "Es konnte kein Finanzamt zu der angegebenen PLZ " & PLZ & " ermittelt  _
werden."
End If
End Function
Teste die Funktion mal mit unterschiedlichen PLZ aus. Wenn da Fehler bei auftauchen, teile mir die PLZ mit, die Fehler verursachen.
In Deiner bisherigen Funktion wird direkt ein Meldungsfensetr angezeigt, wenn es nicht geklappt hat. Da ich nicht weiß, wie die Funktion bisher in Dein Projekt eingebunden ist, weiß ich nicht, was ich statt dem Text, der dort angezeigt wird aus der Funktion zurück geben soll. Die Rückgabe ist bei Dir nicht definiert.
Testen kannst Du meine Funktion unabhängig von Deinem Projekt mit folgender einfachen Sub. Die PLZ kannst Du beliebig anpassen. Was in der Message Box ausgegeben wird, liefert die Funktion an die aufrufende Routine zurück:

Sub test()
MsgBox html_auslesen("13156")
End Sub

Viele Grüße,
Zwenn
AW: Website auslesen
Bahar

Vielen Dank!
Leider findet er bei mir nicht direkt ein Finanzamt, egal welche Postleitzahl ich eingebe. Selbst wenn ich nur den Link mit irgendeiner PLZ dahinter manuell in den Browser eingebe, wird immer "Kein Treffer" angezeigt. Erst wenn ich auf die Lupe zum Suchen klicke, fängt er an zu suchen und schlägt mir dann mehrere Finanzämter vor.
Vielleicht zeigt er mir im Makro deshalb kein Ergebnis an? Liegt es am Link?
LG
AW: Website auslesen
Bahar

Ich habe mir jetzt nochmal die Website anzeigen lassen, während das Makro ausgeführt wird. Wenn ich beim Laden der Website ganz schnell auf die Lupe zum Suchen klicke, funktioniert es und er liest die Adresse aus! =D
Kann man das noch irgendwie einbinden, dass die Lupe automatisch gedrückt wird?
AW: Website auslesen
Bahar

Ich konnte es lösen!
Ich habe den Link ausgetauscht und stattdessen "https://www.bzst.de/DE/Service/Behoerdenwegweiser/Finanzamtsuche/GemFa/finanzamtsuche_Formular.html?nn=95918&resourceId=95914&input_=95918&pageLocale=de&suche="
eingegeben.
Jetzt funktioniert es! Vielen vielen Dank für die große Hilfe! Ich bin echt begeistert!!
Danke!!!

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

Betreff
Datum
Anwender
Anzeige
AW: MSXML2
02.07.2019 13:06:39
Fennek
Hallo,
nach einem ersten Blick in den Quellcode sollte es mit MSXML auslesbar sein. Aber so einen Code zu entwickeln, dauert für mich zu lange für eine kostenlose Hilfestellung.
mfg
AW: Website auslesen
02.07.2019 17:02:36
Zwenn
Hallo Bahar,
die Erklärung spare ich mir für den Moment mal. Aber für meine PLZ kommst Du mit folgender Funktion an die Anschrift des zuständigen Finanzamtes:
(Die Zeilenumbrüche im Makro musst Du wieder entfernen, die stammen von der Forensoftware)

Public Function html_auslesen(PLZ As String) As String
'Konstante für Grund-URL mit Parameter ohne Wert für die PLZ
Const grundURL As String = "http://www.bzst.de/DE/Service/Behoerdenwegweiser/Finanzamtsuche/ _
GemFa/finanzamtsuche_Formular.html?suche="
'Variablen Für Internetzugriff und Adresse
Dim browser As Object
Dim urlPLZ As String
Dim url As String
Dim knotenRichtigerHtmlAusschnitt As Object
Dim knotenFinanzamt As Object
Dim knotenAdresse As Object
Dim anschrift As String
Dim auslesenErfolgreich As Boolean
'URL zusammenbauen und Ausleseerfolg voraussetzen
urlPLZ = PLZ
url = grundURL & urlPLZ
auslesenErfolgreich = True
'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
'Manuelle Wartezeit, damit Inhalte von der Webseite nachgeladen werden können
'Application.Wait (Now + TimeSerial(pause_stunden, pause_minuten, pause_sekunden))
Application.Wait (Now + TimeSerial(0, 0, 5))
'HTML-Ausschnitt mit den gewünschten Daten isolieren
Set knotenRichtigerHtmlAusschnitt = browser.document.getElementsByClassName("row collapse")(1) _
If Not knotenRichtigerHtmlAusschnitt Is Nothing Then
'Finanzamt Name holen
Set knotenFinanzamt = knotenRichtigerHtmlAusschnitt.getElementsByClassName("l- _
headline__line--1")(0)
If Not knotenFinanzamt Is Nothing Then
'Wurde das HTML-Element mit dem Namen des Finanzamtes gefunden, Name auslesen
anschrift = Trim(knotenFinanzamt.innertext)
Else
'Wurde das HTML-Element mit dem Namen des Finanzamtes nicht gefunden, kein Ausleseerfolg
auslesenErfolgreich = False
End If
'Adresse holen
Set knotenAdresse = knotenRichtigerHtmlAusschnitt.getElementsByTagName("p")(0)
If Not knotenAdresse Is Nothing Then
'Gibt es ein erstes p-Tag, den Text daraus als Adresse auslesen
anschrift = anschrift & Chr(13) & Trim(knotenAdresse.innertext)
Else
'Gibt es kein erstes p-Tag, kein Ausleseerfolg
auslesenErfolgreich = False
End If
Else
'Gibt es keinen eingrenzenden HTML-Abschnitt, kein Ausleseerfolg
auslesenErfolgreich = False
End If
'Aufräumen
browser.Quit
Set browser = Nothing
Set knotenRichtigerHtmlAusschnitt = Nothing
Set knotenFinanzamt = Nothing
Set knotenAdresse = Nothing
If auslesenErfolgreich Then
'Konnten Name des Finanzamts und die Adresse ausgelesen werden, Anschrift zurückliefern
html_auslesen = anschrift
Else
'Konnten Name des Finanzamts und die Adresse ausgelesen werden, Text aus alter Funktion zurü _
ckliefern
html_auslesen = "Es konnte kein Finanzamt zu der angegebenen PLZ " & PLZ & " ermittelt  _
werden."
End If
End Function
Teste die Funktion mal mit unterschiedlichen PLZ aus. Wenn da Fehler bei auftauchen, teile mir die PLZ mit, die Fehler verursachen.
In Deiner bisherigen Funktion wird direkt ein Meldungsfensetr angezeigt, wenn es nicht geklappt hat. Da ich nicht weiß, wie die Funktion bisher in Dein Projekt eingebunden ist, weiß ich nicht, was ich statt dem Text, der dort angezeigt wird aus der Funktion zurück geben soll. Die Rückgabe ist bei Dir nicht definiert.
Testen kannst Du meine Funktion unabhängig von Deinem Projekt mit folgender einfachen Sub. Die PLZ kannst Du beliebig anpassen. Was in der Message Box ausgegeben wird, liefert die Funktion an die aufrufende Routine zurück:

Sub test()
MsgBox html_auslesen("13156")
End Sub

Viele Grüße,
Zwenn
Anzeige
AW: Website auslesen
08.07.2019 15:53:18
Bahar
Vielen Dank!
Leider findet er bei mir nicht direkt ein Finanzamt, egal welche Postleitzahl ich eingebe. Selbst wenn ich nur den Link mit irgendeiner PLZ dahinter manuell in den Browser eingebe, wird immer "Kein Treffer" angezeigt. Erst wenn ich auf die Lupe zum Suchen klicke, fängt er an zu suchen und schlägt mir dann mehrere Finanzämter vor.
Vielleicht zeigt er mir im Makro deshalb kein Ergebnis an? Liegt es am Link?
LG
AW: Website auslesen
08.07.2019 15:57:20
Bahar
Ich habe mir jetzt nochmal die Website anzeigen lassen, während das Makro ausgeführt wird. Wenn ich beim Laden der Website ganz schnell auf die Lupe zum Suchen klicke, funktioniert es und er liest die Adresse aus! =D
Kann man das noch irgendwie einbinden, dass die Lupe automatisch gedrückt wird?
Anzeige
AW: Website auslesen
09.07.2019 09:23:49
Bahar
Ich konnte es lösen!
Ich habe den Link ausgetauscht und stattdessen "https://www.bzst.de/DE/Service/Behoerdenwegweiser/Finanzamtsuche/GemFa/finanzamtsuche_Formular.html?nn=95918&resourceId=95914&input_=95918&pageLocale=de&suche="
eingegeben.
Jetzt funktioniert es! Vielen vielen Dank für die große Hilfe! Ich bin echt begeistert!!
Danke!!!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige