2016-07-04 6 views
0

Ich verbrachte mehrere Stunden damit zu erforschen, konnte keine Lösung finden.Fehler mit VBA Web Scrape

Ich versuche, eine relativ einfache VBA Web-Scrape auf Google zu tun. Ich bin gerade dabei, Text in das Google-Suchfeld einzugeben. Es gibt drei verschiedene Routen, die ich gesehen habe, die alle Fehler verursachen.

Ein Weg ist der folgende Code

Dim aEXPLORER as InternetExplorer 

Set aEXPLORER = New InternetExplorer 

Do While aEXPLORER.readyState <> READYSTATE_COMPLETE 
    Application.StatusBar = "Loading google..." 
    DoEvents 
Loop 

An diesem Punkt geht die erste Route wie folgt aus:

aEXPLORER.Document.Getelementbyid("idhere").value 

Das Problem nach .document ist meine Intellisense nicht mehr funktioniert. Wenn ich den Code trotzdem schreibe, wird der Fehler behoben.

Strecke zwei - fügen Sie an der Spitze dim AHTML als Htmldocument

Set aHTML = aEXPLORER.document 
aHTML.getElementById("idhere").value 

Dies ist geringfügig erfolgreicher als ich zum getElementByID Tag bekommen, aber meine Intellisense keine .value überall finden. Ich habe viele andere Optionen wie Innertxt, etc. Aber kein Wert wie mehrere Leute in Tutorials online verwenden.

Ich schaute in meinen Objektbibliotheken und ich sehe kein .value in meiner HTMLDocument-Bibliothek oder meiner InternetExplorer-Bibliothek oder meiner Excel-Bibliothek.

Das Problem muss etwas mit der Deklaration einer Variablen oder eines Objekts oder etwas dieser Art sein. Warum komme ich nie zu einem Wert? Diese erste Methode arbeitete online für drei verschiedene Leute, die Tutorials zeigten, warum funktioniert es nicht, wenn ich es tue? Wie erhalten sie ein Getementbyid-Tag, ohne oben ein HTML-Dokument zu erstellen? Als Referenz verwendet dieses beliebte Lernprogramm Methode 1, "http://analystcave.com/web-scraping-tutorial/" etwa 75% des Weges durch das Tutorial.

Vielen Dank für solche hilfsbereiten Menschen. Ich bin am Ende meines momentan sehr begrenzten Seils.


Antwort Kredit geht an Berco!

Problem 1: Ich verwendete die falsche ID-Kennung. Lösung 1: Kopieren Sie den HTML-Code für jeden Interaktionspunkt in VBA, fügen Sie ihn ein, kopieren Sie ihn und fügen Sie ihn direkt ein. Dies hat auch einige andere Vorteile.

Problem 2: Ich war besorgt über den Verlust von Intellisense bei .value. Lösung 2: Das Fehlen von Intellisense bedeutet nicht, dass der Code nicht funktioniert. Es bedeutet nur, dass der Code nicht mit einem Dim/Set eingerichtet ist. Um dies zu lösen, müssen Sie dieses Element als HTMLInput dimmen, für das die Microsoft HTML-Objektbibliotheksreferenz überprüft werden muss. Sie können jedoch den Wert .value usw. auch ohne Intellisense verwenden, solange die HTML-Objektbibliotheksreferenz aktiviert ist.

Antwort

0

Die ID der googles Suchleiste ist (id = "lst-ib"). Probieren Sie etwas wie

dim searchbar als Objekt

Satz searchbar = aEXPLORER.Document.Getelementbyid ("lst-ib") searchbar.value = "Ich will Google diese"

+0

Danke Berco! – StevenB

+0

Berco, wollte Sie nur wissen lassen, dass ich von hier bis zur vollständigen Automatisierung meiner administrativen Aufgaben bei der Arbeit gekommen bin. Ich schätze Ihre Investition! – StevenB

0

Antwort Kredit Berco geht !

Problem 1: Ich verwendete die falsche ID-Kennung. Lösung 1: Kopiere und füge HTML-Code für jeden Interaktionspunkt in VBA ein, kommone aus und kopiere den Identifier direkt daraus. Dies hat auch einige andere Vorteile.

Problem 2: Ich war besorgt über den Verlust von Intellisense bei .value. Lösung 2: Nicht intellisense bedeutet nicht, dass der Code nicht funktioniert. Es bedeutet nur, dass der Code nicht mit einem Dim/Set eingerichtet ist. Um dies zu lösen, müssen Sie dieses Element als HTMLInput dimmen, für das die Microsoft HTML-Objektbibliotheksreferenz überprüft werden muss. Sie können jedoch den Wert .value usw. auch ohne Intellisense verwenden, solange die HTML-Objektbibliotheksreferenz aktiviert ist.

+0

Verwenden Sie den Bearbeitungslink zu Ihrer Frage, um weitere Informationen hinzuzufügen. Die Schaltfläche Post-Antwort sollte nur für vollständige Antworten auf die Frage verwendet werden. - [Aus Bewertung] (/ review/low-quality-posts/14633202) – 2ps

+0

Dies ist die Antwort auf die Fragen, die ich gestellt habe :) – StevenB

+0

Um sicher zu sein, wenn es die Antwort ist, sollte es als Antwort richtig geschrieben werden? Jemand anders hat gerade eine andere Frage beantwortet und ich möchte sicher sein, dass ich zurück zur Community beitragen werde, indem ich das andeutere :) Thx! – StevenB