Próbowałem używać automatyzacji IE do wyszukiwania w Google ciągu tekstowego w Excelu. Chcę zwrócić hiperłącze do strony internetowej pierwszego wyniku w innej komórce w programie Excel. czy to możliwe? Mam listę 60 000 rekordów, które muszę przeszukiwać w Google i zwracać hiperłącze do strony w pierwszym wyniku. Czy istnieje inne podejście do tego, które polecasz? Doceniam pomoc z góry.Używanie języka VBA w programie Excel do wyszukiwania Google w IE i zwracanie hiperłącza pierwszego wyniku
Odpowiedz
Jako 60 000 rekordów polecam używać obiektu xmlHTTP zamiast używać IE.
HTTP żąda łatwiejszy i dużo szybciej
Pobierz przykładowy plik here
Sub XMLHTTP()
Dim url As String, lastRow As Long
Dim XMLHTTP As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
Dim start_time As Date
Dim end_time As Date
lastRow = Range("A" & Rows.Count).End(xlUp).Row
Dim cookie As String
Dim result_cookie As String
start_time = Time
Debug.Print "start_time:" & start_time
For i = 2 To lastRow
url = "https://www.google.co.in/search?q=" & Cells(i, 1) & "&rnd=" & WorksheetFunction.RandBetween(1, 10000)
Set XMLHTTP = CreateObject("MSXML2.serverXMLHTTP")
XMLHTTP.Open "GET", url, False
XMLHTTP.setRequestHeader "Content-Type", "text/xml"
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0"
XMLHTTP.send
Set html = CreateObject("htmlfile")
html.body.innerHTML = XMLHTTP.ResponseText
Set objResultDiv = html.getelementbyid("rso")
Set objH3 = objResultDiv.getelementsbytagname("H3")(0)
Set link = objH3.getelementsbytagname("a")(0)
str_text = Replace(link.innerHTML, "<EM>", "")
str_text = Replace(str_text, "</EM>", "")
Cells(i, 2) = str_text
Cells(i, 3) = link.href
DoEvents
Next
end_time = Time
Debug.Print "end_time:" & end_time
Debug.Print "done" & "Time taken : " & DateDiff("n", start_time, end_time)
MsgBox "done" & "Time taken : " & DateDiff("n", start_time, end_time)
End Sub
HTH
santosh
Linki wydają się być konsekwentnie w obrębie znaczników H3. Normalnie można użyć coś jak poniżej, aby sprawdzić aż załadowaniu strony:
Private Declare Sub Sleep Lib "kernel32" (ByVal nMilliseconds As Long)
Sub UseIE()
Dim ie As Object
Dim thePage As Object
Dim strTextOfPage As String
Set ie = CreateObject("InternetExplorer.Application")
'ie.FullScreen = True
With ie
'.Visible = True
.Navigate "http://www.bbc.co.uk"
While Not .ReadyState = READYSTATE_COMPLETE '4
Sleep 500 'wait 1/2 sec before trying again
Wend
End With
Set thePage = ie.Document
'more code here
End Sub
Jednak chciałbym, zamiast wielokrotnie próbować odwołać pierwiastek ciągu pierwszego H3 stosując getElementsByTagName("H3")
, dostać pierwszy z tych elementów , spójrz na to w odniesieniu do linku A i jego atrybutu href.
W JavaScript próby odwoływania się do nieistniejących elementów wróciłyby undefined
, ale z VBA będzie prawdopodobnie potrzebny kod obsługi błędów.
Raz uzyskały href chciałbym zatrzymać nawigacji (nie wiem polecenia dla tego, prawdopodobnie ie.Stop
) lub od razu przejść do następnej strony.
Pierwsze łącze (linki) będą jednak często linkami sponsorowanymi, a zwracany href jest nieco zniekształcony. Tekst tych linków sponsorowanych wydaje się zawierać tagi em
. Mogę użyć tych informacji, aby odrzucić te linki i zajrzeć dalej w dół strony.
Nie wiem, czy jest lepszy sposób na zrobienie tego.
- 1. Zwracanie dopasowania regex w VBA (excel)
- 2. Przycinanie komórek przy użyciu języka VBA w programie Excel
- 3. CopyOrigin na Insert w programie Excel VBA
- 4. Niedopasowanie argumentu ByRef w programie Excel VBA
- 5. Używanie skryptów JavaScript w programie Excel
- 6. Efektywna dolna obudowa w programie Excel VBA
- 7. VBA zminimalizować wstążkę w programie Excel
- 8. Filtrowanie tablic 2D w programie Excel VBA
- 9. Excel VBA Kontrolowanie lokalnego intranetu IE
- 10. VBA Excel: Uzyskiwanie wyniku dla wielu komórek
- 11. Dostęp do bazy danych SQL w programie Excel VBA
- 12. Jak odnieść się do tabel w programie Excel vba?
- 13. Jak uzyskać dostęp do grup kontaktów w programie Excel VBA?
- 14. Jak używać VBA do komórki w programie Excel 2007 przezroczysty
- 15. #NAME? błąd w programie Excel dla funkcji VBA
- 16. Używanie Excel VBA do eksportowania danych do tabeli MS Access
- 17. Względne zamiast bezwzględnych ścieżek w programie Excel VBA
- 18. Korzystanie z funkcji "Komórki" w programie excel vba
- 19. Funkcja Dir w programie Excel 2010 VBA nie działa
- 20. Jaki jest czas istnienia zmiennej globalnej w programie excel vba?
- 21. Funkcja Dir() nie działa w programie Mac Excel 2011 VBA
- 22. Ustawianie wartości aktywnego skoroszytu w programie Excel VBA
- 23. jak podzielić łańcuch z wieloma delimetrami w programie vba excel?
- 24. Funkcja skrótu MD5 w programie excel bez użycia VBA
- 25. Używanie Flickr API do wyszukiwania zdjęć według lokalizacji lub języka
- 26. Używanie języka VBA do monitowania użytkownika o wybranie komórek (prawdopodobnie z innego arkusza)
- 27. Umieszczenie wyniku wyszukiwania wyrazów w zmiennej
- 28. Zmień nazwę zdarzenia arkusza w programie Excel
- 29. Co - w programie Excel?
- 30. Używanie programu Excel VBA do uruchamiania kwerend SQL
Dzięki! To działa dobrze, z wyjątkiem sytuacji, gdy po około 100 rekordach otrzymam błąd Run 80070005. Odmowa dostępu. Jakieś wskazówki, dlaczego? –
@CollinHendo Nope, będą musiały zobaczyć twoje dane do tego. Alternatywnie możesz dodać "On error resume next" na górze kodu. Jeśli rozwiązanie było pomocne głosowanie pls. – Santosh
Mogę podać Ci próbkę moich danych. Jak mogłem to zrobić? –