Selenium Samouczek VBA Excel: Przykład skrobania w przeglądarce Chrome

Czym jest Data Scraping przy użyciu selenu?

Selenium można sklasyfikować jako narzędzie automatyzacji, które ułatwia pozyskiwanie informacji ze stron internetowych HTML w celu przeprowadzenia web scrapingu przy użyciu przeglądarki Google Chrome.

Jak przygotować makro Excela przed wykonaniem skrobania danych za pomocą Selenium?

Istnieją pewne warunki wstępne, które należy spełnić w pliku makra programu Excel przed przystąpieniem do procesu skrobania danych w programie Excel.

Te przesłanki są następujące: –

Krok 1) Otwórz makro oparte na programie Excel i uzyskaj dostęp do opcji programistycznych programu Excel.

Przygotuj makro programu Excel przed wykonaniem skrobania danych

Krok 2) Wybierz opcję Visual Basic na wstążce Deweloper.

Przygotuj makro programu Excel przed wykonaniem skrobania danych

Krok 3) Włóż nowy moduł.

Przygotuj makro programu Excel przed wykonaniem skrobania danych

Krok 4) Zainicjuj nowy podprogram i nadaj mu nazwę test2.

Sub test2()
End sub

Oto wyniki modułu: –

Przygotuj makro programu Excel przed wykonaniem skrobania danych

Krok 5) Uzyskaj dostęp do opcji odniesienia pod zakładką narzędzia i odnośnikiem Selenium biblioteka typu. Następujące biblioteki należy odwoływać się do modułu, ponieważ pomagają one w otwieraniu Google Chrome i ułatwiają rozwój skryptów makr.

Przygotuj makro programu Excel przed wykonaniem skrobania danych

Teraz plik Excel jest gotowy do interakcji z przeglądarką Internet Explorer. Następnym krokiem byłoby włączenie skryptu makra, który ułatwiłby skrobanie danych w formacie HTML.

Jak otworzyć Google Chrome używając VBA?

Oto krok do otwarcia Google Chrome za pomocą VBA

Krok 1) Zadeklaruj i zainicjuj zmienne w podprogramie, jak pokazano poniżej

Sub test2()
Dim driver as new webdriver
Dim rowc, cc, columnC as integer

Krok 2) Aby otworzyć przeglądarkę Google Chrome za pomocą selenu i języka VBA, wpisz driver.start „chrome” i naciśnij F5.

Poniżej znajduje się kod.

Sub test2()
Dim driver as new webdriver
Dim rowc, cc, columnC as integer
Driver.start "Chrome"
Application.Wait Now+Timevalue("00:00:20")
End sub

Wynik modułu będzie następujący: –

Otwarte Google Chrome Korzystanie z VBA

Jak otworzyć stronę internetową w przeglądarce Google Chrome za pomocą VBA?

Gdy będziesz w stanie uzyskać dostęp do Google Chrome za pomocą VBA, następnym krokiem będzie włączenie dostępu do witryny za pomocą VBA. Ułatwia to funkcja get, w której adres URL musi zostać przekazany jako podwójne cudzysłowy w atrybucie.

Wykonaj następujące kroki, zgodnie z wyświetleniem

Moduł wyglądałby następująco: –

Otwórz stronę internetową w Google Chrome Korzystanie z VBA

Naciśnij klawisz F5, aby wykonać makro.

Następująca strona internetowa zostanie otwarta w przeglądarce Google Chrome, jak pokazano

Sub test2()
Dim driver as new webdriver
Dim rowc, cc, columnC as integer
Driver.start "Chrome"
Driver.get "https://demo.guru99.com/test/web-table-element.php"
Application.Wait Now+Timevalue("00:00:20")
End sub

Otwórz stronę internetową w Google Chrome Korzystanie z VBA

Teraz makro Excela jest gotowe do wykonania zadań scrapowania. Następny krok pokaże, jak można wyodrębnić informacje, stosując selen i VBA.

Jak zeskrobać informacje ze strony internetowej za pomocą VBA?

Załóżmy, że day trader chce codziennie uzyskiwać dostęp do danych ze strony internetowej. Za każdym razem, gdy daytrader naciśnie przycisk „kliknij”, powinien automatycznie pobrać dane rynkowe do programu Excel.

Z powyższej strony internetowej konieczne byłoby sprawdzenie elementu i zaobserwowanie struktury danych. Uzyskaj dostęp do poniższego kodu źródłowego HTML, naciskając Ctrl + Shift + I

<table class="datatable">
<thead>
<tr>
<th>Company</th>
<th>Group</th>
<th>Pre Close (Rs)</th>
<th>Current Price (Rs)</th>
<th>% Change</th>
</tr>

Kod źródłowy wyglądałby następująco: –

Jak widać, dane są ustrukturyzowane jako pojedyncza tabela HTML. Dlatego, aby wyciągnąć całe dane z tabeli HTML, konieczne byłoby zaprojektowanie makra, które wyciąga informacje nagłówka tabeli HTML i odpowiadające dane powiązane z tabelą. Wykonaj następujące zadania, jak pokazano: –

Krok 1) Sformułuj pętlę for, która przechodzi przez informacje nagłówka HTML jako kolekcję. Sterownik selenu musi znaleźć informacje nagłówka tabeli HTML. Aby to zrobić, wykorzystujemy metodę FindElementByClass() i FindElementByTag(), aby wykonać zadanie, jak pokazano

Moduł VBA wyglądałby następująco: –

Sub test2()
Dim driver As New WebDriver
Dim rowc, cc, columnC As Integer
rowc = 2
Application.ScreenUpdating = False
driver.Start "chrome"
driver.Get "https://demo.guru99.com/test/web-table-element.php"
For Each th In driver.FindElementByClass("dataTable").FindElementByTag("thead").FindElementsByTag("tr")
cc = 1
For Each t In th.FindElementsByTag("th")
Sheet2.Cells(1, cc).Value = t.Text
cc = cc + 1
Next t
Next th

Krok 2) Następnie sterownik selenu zlokalizuje dane tabeli, korzystając z podobnego podejścia, jak wspomniano powyżej. Musisz napisać następujący kod: –

Sub test2()
Dim driver As New WebDriver
Dim rowc, cc, columnC As Integer
rowc = 2
Application.ScreenUpdating = False
driver.Start "chrome"
driver.Get"https://demo.guru99.com/test/web-table-element.php"
For Each th In driver.FindElementByClass("dataTable").FindElementByTag("thead").FindElementsByTag("tr")
cc = 1
For Each t In th.FindElementsByTag("th")
Sheet2.Cells(1, cc).Value = t.Text
cc = cc + 1
Next t
Next th
For Each tr In driver.FindElementByClass("dataTable").FindElementByTag("tbody").FindElementsByTag("tr")
columnC = 1
For Each td In tr.FindElementsByTag("td")
Sheet2.Cells(rowc, columnC).Value = td.Text
columnC = columnC + 1
Next td
rowc = rowc + 1
Next tr
Application.Wait Now + TimeValue("00:00:20")
End Sub

Moduł vba wyglądałby następująco: –

Excel może zostać zainicjowany za pomocą atrybutu Range arkusza Excel lub za pomocą atrybutu cells arkusza Excel. Aby zmniejszyć złożoność skryptu VBA, dane kolekcji są inicjowane do atrybutu excel cells arkusza 2 obecnego w skoroszycie. Ponadto atrybut text pomaga w uzyskaniu informacji tekstowej umieszczonej pod znacznikiem HTML.

Sub test2()
Dim driver As New WebDriver
Dim rowc, cc, columnC As Integer
rowc = 2
Application.ScreenUpdating = False
driver.Start "chrome"
driver.Get"https://demo.guru99.com/test/web-table-element.php"
For Each th In driver.FindElementByClass("dataTable").FindElementByTag("thead").FindElementsByTag("tr")
cc = 1
For Each t In th.FindElementsByTag("th")
Sheet2.Cells(1, cc).Value = t.Text
cc = cc + 1
Next t
Next th
For Each tr In driver.FindElementByClass("dataTable").FindElementByTag("tbody").FindElementsByTag("tr")
columnC = 1
For Each td In tr.FindElementsByTag("td")
Sheet2.Cells(rowc, columnC).Value = td.Text
columnC = columnC + 1
Next td
rowc = rowc + 1
Next tr
Application.Wait Now + TimeValue("00:00:20")
End Sub

Moduł vba wyglądałby następująco: –

Zeskrob informacje ze strony internetowej za pomocą języka VBA

Krok 3) Gdy skrypt makra będzie gotowy, przekaż i przypisz podprogram do przycisku Excela i wyjdź z modułu VBA. Oznacz przycisk jako odświeżający lub dowolną odpowiednią nazwę, którą można mu nadać. W tym przykładzie przycisk jest inicjowany jako odświeżanie.

Zeskrob informacje ze strony internetowej za pomocą języka VBA

Krok 4) Naciśnij przycisk odświeżania, aby uzyskać poniższe dane wyjściowe

Zeskrob informacje ze strony internetowej za pomocą języka VBA

Krok 5) Porównaj wyniki w programie Excel z wynikami przeglądarki Google Chrome

Zeskrob informacje ze strony internetowej za pomocą języka VBA

Podsumowanie

  • Selenium można sklasyfikować jako narzędzie automatyzacji, które ułatwia pozyskiwanie informacji ze stron internetowych HTML w celu przeprowadzenia web scrapingu przy użyciu przeglądarki Google Chrome.
  • Skrobanie w Internecie powinno być wykonywane ostrożnie.
  • Wymazywanie informacji jest zwykle sprzeczne z warunkami witryny internetowej.
  • Jeśli scrapowanie odbywa się za pomocą selenu, dostępna jest obsługa wielu przeglądarek.
  • Innymi słowy, skrobak może wykonywać podobne zadania, jak skrobanie Firefox, Internet Explorer również.