Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Go Yellow Anfrage

Begonnen von datekk, November 07, 2016, 15:00:47

⏪ vorheriges - nächstes ⏩

datekk

Hi. (Wie) ist es möglich, eine GoYellow (oder anderes Online-Telefonbuch) Anfrage mit einer Telefonnummer zu starten und das Suchergebnis in eine Access Tabelle einfließen zu lassen?

Lg
datekk
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

crystal

#1
Hallo,
die Antwort lautet Ja.

Du brauchst in deinem Formular ein Webbrowser-Steuerelement (kannst du natürlich auch verstecken).
Dem übergibst du dann den Search-String.
Das wb-Element zeigt nun entweder eine Seite mit der gewünschten Info an oder eine Seite, auf der irgendwo steht "nicht gefunden".
Du musst also den HTML-Code der Seite analysieren. Das geht über wb.document.

Hier mal ein Stück Code dazu:


Option Explicit

Public WithEvents WB As WebBrowser
Public WithEvents HDoc As HTMLDocument

Private Sub btnProcess_Click()
'...
'get title
    s1 = ATrim(HDoc.getElementsByTagName("h1").Item(0).innerText)
    If s1 <> "" Then
        Title = s1
    Else
        Title = "?"
    End If

'get more
    s1=""
    s1 = LCase(ATrim(HDoc.getElementsByClassName("more").Item(0).innerText))
    If s1 <> "" Then
...

Private Sub Form_Load()
    Set WB = Wb1.Object
End Sub

Private Sub WB_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    If WB.ReadyState = READYSTATE_COMPLETE Then
        Set HDoc = WB.Document
    End If
End Sub

Private Sub btnSearch_Click()
   
    WB.navigate "http://www.abcde.com/search?q=" & MyItem.Value

End Sub



Mit diesem Code habe ich's gemacht. Allerdings mit einem sichtbaren wb-Element und den Buttons "Search" und "Process". (Meine Funktion ATrim entfernt führende und hängende sowie doppelte Leerzeichen.)

Es war nicht einfach, das alles herauszufinden...

Vielleicht hilft es dir.

LG
crystal

PS: du brauchst den Verweis auf die MS HTML Object Library.
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

datekk

Besten Dank. Wie unterscheide ich aber z.B. Firmenname von Straße usw. Die Suchergebnisse sollen ja automatisch in eine Tabelle übernommen werden.. also ich möchte nach einer Telefonnummer suchen und das Ergebnis (eine Firmenadresse) soll dann nach Firmenname, Straße, PLZ usw. in eine Tabelle wandern. Das kann ich aus o.g. Code noch nicht lesen.
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps


crystal

@datekk
Hallo,
was in meinem Code-Fragment nicht sofort sichtbar ist, ist die Zuordnung der Webseiten-Texte zu Access-Feldnamen.
Die Zeile
        Title = s1
macht genau das, "Title" ist ein Feld in der Access-Tabelle.

OK - mein Code-Fragment ist etwas unglücklich, es sollte vielmehr darauf hinweisen, das HDoc verschiedene Möglichkeiten bietet, auf Elemente der HTML-Seite zuzugreifen, z.B. getElementsByTagName oder getElementsByClassName.

Kernaussage ist also: du musst die HTML-Seite selbst interpretieren und nach den gewünschten Werten absuchen. Dazu musst du dir den Quellcode der HTML-Seite anschauen und geeignete Identifier finden, die deine gewünschten Daten identifizieren (TagName, ClassName etc.).

Das kann schwierig werden, je nach dem, wie der HTML-Seiten-Generator programmiert wurde. Manchmal haben "Werte" keinen Tag oder Bezeichner und stehen "einfach so" mitten im HTML-Text. Oft muss man einfach nach HTML-Texten suchen, die vor dem gewünschten Wert stehen (vereinfachtes Bsp.: "die Telefon-Nummer lautet:"<weitere HTML-Anweisungen wie TextGröße oder -Farbe>"030864322")

(Solche Programme bzw. Funktionen werden Scraper genannt.)

Der von DF6GL eingestellte Link ist dabei sicher sehr hilfreich.

lg
crystal

Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

datekk

Dann vielen lieben Dank. Ich schau mal was ich draus bauen kann :)
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps