Reklama
Indeksowanie sieci jest niezwykle przydatne do automatyzacji niektórych zadań rutynowo wykonywanych na stronach internetowych. Możesz napisać robota do interakcji z witryną, tak jak zrobiłby to człowiek.
w wcześniejszy artykuł Jak zbudować podstawowy robot indeksujący do pobierania informacji ze strony internetowej?Czy kiedykolwiek chciałeś przechwycić informacje ze strony internetowej? Oto jak napisać robota do poruszania się po witrynie i wyodrębniania tego, czego potrzebujesz. Czytaj więcej , omówiliśmy podstawy pisania a robot internetowy Co to jest skrobanie stron internetowych? Jak zbierać dane ze stron internetowychCzy kiedykolwiek traciłeś cenny czas na czytanie danych na stronach internetowych? Oto jak znaleźć żądane dane za pomocą skrobania sieci. Czytaj więcej za pomocą modułu Pythona, scrapy. Ograniczeniem tego podejścia jest to, że przeszukiwacz nie obsługuje javascript. Nie będzie działać poprawnie z tymi witrynami, które intensywnie wykorzystują javascript do zarządzania interfejsem użytkownika. W takich sytuacjach możesz napisać robota indeksującego, który korzysta z Google Chrome, a zatem może obsługiwać javascript tak, jak normalna przeglądarka Chrome sterowana przez użytkownika.
Automatyzacja przeglądarki Google Chrome wymaga użycia narzędzia o nazwie Selen. Jest to składnik oprogramowania, który znajduje się między Twoim programem a przeglądarką i pomaga Ci sterować przeglądarką przez Twój program. W tym artykule przeprowadzimy Cię przez cały proces automatyzacji Google Chrome. Kroki zazwyczaj obejmują:
- Konfigurowanie selenu
- Używanie Inspektora Google Chrome do identyfikowania sekcji strony internetowej
- Pisanie programu Java do automatyzacji Google Chrome
Na potrzeby tego artykułu zbadajmy, jak czytać Google Mail z Javy. Chociaż Google udostępnia interfejs API (interfejs programowania aplikacji) do czytania poczty, w tym artykule używamy Selenium do interakcji z Google Mail w celu zademonstrowania tego procesu. Google Mail intensywnie wykorzystuje javascript, dzięki czemu jest dobrym kandydatem do nauki Selenium.
Konfigurowanie selenu
Sterownik sieciowy
Jak wyjaśniono powyżej, Selen składa się z komponentu oprogramowania, który działa jako osobny proces i wykonuje działania w imieniu programu java. Ten składnik nazywa się Sterownik sieciowy i należy go pobrać na komputer.
Kliknij tutaj aby przejść do strony pobierania Selenium, kliknij najnowszą wersję i pobierz odpowiedni plik dla systemu operacyjnego Twojego komputera (Windows, Linux lub MacOS). Jest to archiwum ZIP zawierające chromedriver.exe. Wypakuj go do odpowiedniej lokalizacji, takiej jak C:\WebDrivers\chromedriver.exe. Użyjemy tej lokalizacji w dalszej części programu java.
Moduły Java
Następnym krokiem jest skonfigurowanie modułów Java wymaganych do korzystania z Selenium. Zakładając, że używasz Mavena do budowania programu Java, dodaj następującą zależność do swojego POM.xml.
org.seleniumhq.selenium selen-java 3.8.1
Po uruchomieniu procesu kompilacji wszystkie wymagane moduły powinny zostać pobrane i skonfigurowane na komputerze.
Selen Pierwsze kroki
Zacznijmy od Selenium. Pierwszym krokiem jest stworzenie Sterownik Chrome instancja:
Sterownik WebDriver = nowy ChromeDriver();
To powinno otworzyć okno Google Chrome. Przejdźmy do strony wyszukiwania Google.
kierowca.pobierz(" http://www.google.com");
Uzyskaj odwołanie do elementu wprowadzania tekstu, abyśmy mogli przeprowadzić wyszukiwanie. Element wprowadzania tekstu ma nazwę Q. Lokalizujemy elementy HTML na stronie za pomocą metody Sterownik Web.znajdźElement().
Element WebElement = driver.findElement (By.name("q"));
Możesz wysłać tekst do dowolnego elementu za pomocą metody WyślijKlawisze(). Prześlijmy wyszukiwane hasło i zakończmy je znakiem nowej linii, aby wyszukiwanie rozpoczęło się natychmiast.
element.sendKeys("terminator\n");
Teraz, gdy trwa wyszukiwanie, musimy poczekać na stronę wyników. Możemy to zrobić w następujący sposób:
nowy WebDriverWait (sterownik, 10) .until (d -> d.getTitle().toLowerCase().startsWith("terminator"));
Ten kod w zasadzie mówi Selenium, aby poczekał 10 sekund i wrócił, gdy tytuł strony zaczyna się od terminator. Używamy funkcji lambda, aby określić warunek oczekiwania.
Teraz możemy uzyskać tytuł strony.
System.out.println("Tytuł: " + driver.getTitle());
Po zakończeniu sesji okno przeglądarki można zamknąć za pomocą:
kierowca.zakończ();
A to, ludzie, jest prostą sesją przeglądarki kontrolowaną za pomocą javy przez selen. Wydaje się dość proste, ale umożliwia zaprogramowanie wielu rzeczy, które normalnie musiałbyś zrobić ręcznie.
Korzystanie z Inspektora Google Chrome
Inspektor Google Chrome Rozwiąż problemy z witryną za pomocą narzędzi programistycznych Chrome lub FirebugaJeśli do tej pory śledziłeś moje samouczki jQuery, być może napotkałeś już pewne problemy z kodem i nie wiesz, jak je naprawić. W obliczu niefunkcjonalnego fragmentu kodu jest bardzo... Czytaj więcej to nieocenione narzędzie do identyfikacji elementów, które mają być użyte z Selenium. Pozwala nam na celowanie w konkretny element z javy w celu wydobycia informacji, a także interaktywną akcję, taką jak kliknięcie przycisku. Oto wprowadzenie do korzystania z Inspektora.
Otwórz Google Chrome i przejdź do strony, powiedz stronę IMDb dla Liga Sprawiedliwości (2017).
Znajdźmy element, do którego chcemy trafić, powiedzmy podsumowanie filmu. Kliknij podsumowanie prawym przyciskiem myszy i wybierz „Sprawdź” z menu podręcznego.
Z zakładki „Elementy” widzimy, że tekst podsumowania to div z klasą podsumowanie_tekstu.
Używanie CSS lub XPath do zaznaczania
Selenium obsługuje wybieranie elementów ze strony za pomocą CSS. (Obsługiwany dialekt CSS to CSS2). Na przykład, aby wybrać tekst podsumowania ze strony IMDb powyżej, napiszemy:
WebElement summaryEl = driver.findElement (By.cssSelector("div.summary_text"));
Możesz także użyć XPath do zaznaczania elementów w bardzo podobny sposób (Idź tutaj dla specyfikacji). Ponownie, aby wybrać tekst podsumowania, zrobimy:
WebElement summaryEl = driver.findElement (By.xpath("//div[@class='summary_text']"));
XPath i CSS mają podobne możliwości, więc możesz korzystać z tego, z czym czujesz się komfortowo.
Czytanie poczty Google Mail z Javy
Przyjrzyjmy się teraz bardziej złożonemu przykładowi: pobieranie Google Mail.
Uruchom sterownik Chrome, przejdź do gmail.com i poczekaj, aż strona się załaduje.
Sterownik WebDriver = nowy ChromeDriver(); kierowca.pobierz(" https://gmail.com"); nowy WebDriverWait (sterownik, 10) .until (d -> d.getTitle().toLowerCase().startsWith("gmail"));
Następnie poszukaj pola e-mail (jest ono nazwane identyfikatorem identyfikator id) i wprowadź adres e-mail. Kliknij Następny i poczekaj na załadowanie strony hasła.
/* Wpisz nazwę użytkownika/adres e-mail */ { driver.findElement (By.cssSelector("#identifierId")).sendKeys (e-mail); driver.findElement (By.cssSelector(".RveJvd")).click(); } nowy WebDriverWait (sterownik, 10) .until (d ->! d.findElements (By.xpath("//div[@id='hasło']")).isEmpty() );
Teraz wprowadzamy hasło, klikamy Następny ponownie i poczekaj na załadowanie strony Gmaila.
/* Wpisz hasło */ { driver .findElement (By.xpath("//div[@id='hasło']//input[@type='hasło']")) .sendKeys (hasło); driver.findElement (By.cssSelector(".RveJvd")).click(); } nowy WebDriverWait (sterownik, 10) .until (d ->! d.findElements (By.xpath("//div[@class='Cp']")).isEmpty() );
Pobierz listę wierszy wiadomości e-mail i zapętlaj każdy wpis.
Listawiersze = sterownik .findElements (By.xpath("//div[@class='Cp']//table/tbody/tr")); for (WebElement tr: wiersze) { }
Dla każdego wpisu pobierz Z pole. Zwróć uwagę, że niektóre wpisy Od mogą zawierać wiele elementów w zależności od liczby osób w rozmowie.
{ /* Z elementu */ System.out.println("Od: "); for (WebElement e: tr .findElements (By.xpath(".//div[@class='yW']/*"))) { System.out.println(" " + e.getAttribute("email") + ", " + e.getAttribute("nazwa") + ", " + e.getText()); } }
Teraz pobierz temat.
{ /* Temat */ System.out.println("Sub: " + tr.findElement (By.xpath(".//div[@class='yNN']")).getText()); }
Oraz datę i godzinę wiadomości.
{ /* Data/Czas */ ElementWeb dt = tr.findElement (By.xpath("./td[8]/*")); System.out.println("Data: " + dt.getAttribute("tytuł") + ", " + dt.getText()); }
Oto łączna liczba wierszy wiadomości e-mail na stronie.
System.out.println (rows.size() + " mails.");
I wreszcie skończyliśmy, więc zamykamy przeglądarkę.
kierowca.zakończ();
Podsumowując, możesz użyć Selenium z Google Chrome do indeksowania tych witryn, które intensywnie używają javascript. A dzięki Inspektorowi Google Chrome dość łatwo jest wypracować wymagany CSS lub XPath do wyodrębnienia z elementu lub interakcji z nim.
Czy masz jakieś projekty, które czerpią korzyści z używania Selenium? A jakie problemy z tym się borykasz? Proszę opisać w komentarzach poniżej.