FRFAM.COM >> Famille >> Technologie &Innovation >> Informatique

Tutoriel complet : Créez un robot d'exploration web avec Selenium, Chrome et Java

Le web crawling est un outil puissant pour automatiser les tâches répétitives sur les sites web. Vous pouvez développer un robot capable d'interagir avec un site comme le ferait un utilisateur humain.

Dans un précédent article, nous avons exploré les bases du web crawling avec le module Python Scrapy. Cependant, cette approche ne gère pas le JavaScript. Pour les sites heavily dépendants du JavaScript, optez pour un robot utilisant Google Chrome, piloté comme un navigateur standard.

L'automatisation de Chrome repose sur Selenium, un framework qui agit comme intermédiaire entre votre code et le navigateur. Ce tutoriel, basé sur notre expertise en automatisation web, vous guide pas à pas : configuration de Selenium, utilisation de l'inspecteur Chrome, et programmation en Java.

  • Installer Selenium et ChromeDriver
  • Utiliser l'inspecteur Chrome pour cibler les éléments
  • Développer un programme Java pour automatiser Chrome

Pour illustrer, nous lirons les emails Gmail via Selenium (à des fins éducatives uniquement ; préférez l'API officielle Gmail pour les usages réels, en respectant les conditions d'utilisation).

Configurer Selenium

ChromeDriver

Selenium utilise un ChromeDriver, un exécutable distinct qui contrôle le navigateur. Téléchargez la dernière version compatible avec votre Chrome sur chromedriver.chromium.org.

Extrayez chromedriver.exe (Windows) ou l'équivalent dans un dossier comme C:\WebDrivers\chromedriver.exe. Ajoutez ce chemin à votre PATH ou spécifiez-le dans le code.

Dépendances Java

Pour Maven, ajoutez cette dépendance dans pom.xml (version mise à jour pour fiabilité) :

<dependencies>
  <dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.25.0</version>
  </dependency>
</dependencies>

Maven téléchargera automatiquement les JAR nécessaires.

Premiers pas avec Selenium

Créez une instance ChromeDriver :

WebDriver driver = new ChromeDriver();

Naviguez vers Google :

driver.get("https://www.google.com");

Localisez le champ de recherche (name="q") :

WebElement element = driver.findElement(By.name("q"));

Envoyez une requête :

element.sendKeys("terminator\n");

Attendez les résultats :

new WebDriverWait(driver, Duration.ofSeconds(10))
  .until(d -> d.getTitle().toLowerCase().startsWith("terminator"));

Afficher le titre :

System.out.println("Titre : " + driver.getTitle());

Fermez :

driver.quit();

Cette base simple permet d'automatiser de nombreuses interactions manuelles.

Utiliser l'inspecteur Chrome

L'inspecteur Chrome est essentiel pour identifier les sélecteurs. Ouvrez une page (ex. IMDb Justice League), clic droit sur un élément > "Inspecter".

Tutoriel complet : Créez un robot d exploration web avec Selenium, Chrome et Java

Le résumé est un <div class="summary_text"> :

Tutoriel complet : Créez un robot d exploration web avec Selenium, Chrome et Java

Sélection par CSS ou XPath

Selenium supporte CSS et XPath. Pour le résumé :

WebElement summaryEl = driver.findElement(By.cssSelector("div.summary_text"));

Ou XPath :

WebElement summaryEl = driver.findElement(By.xpath("//div[@class='summary_text']"));

Choisissez selon votre préférence.

Lire Gmail depuis Java (exemple éducatif)

Initiez :

WebDriver driver = new ChromeDriver();

driver.get("https://gmail.com");

new WebDriverWait(driver, Duration.ofSeconds(10))
  .until(d -> d.getTitle().toLowerCase().startsWith("gmail"));

Email :

driver.findElement(By.cssSelector("#identifierId")).sendKeys(email);
driver.findElement(By.cssSelector(".RveJvd")).click();

new WebDriverWait(driver, Duration.ofSeconds(10))
  .until(d -> !d.findElements(By.xpath("//div[@id='password']")).isEmpty());

Mot de passe :

driver.findElement(By.xpath("//div[@id='password']//input[@type='password']"))
  .sendKeys(password);
driver.findElement(By.cssSelector(".RveJvd")).click();

new WebDriverWait(driver, Duration.ofSeconds(10))
  .until(d -> !d.findElements(By.xpath("//div[@class='Cp']")).isEmpty());

Lignes emails :

List<WebElement> rows = driver
  .findElements(By.xpath("//div[@class='Cp']//table/tbody/tr"));

for (WebElement tr : rows) {
  // De
  System.out.println("De :");
  for (WebElement e : tr.findElements(By.xpath(".//div[@class='yW']/*"))) {
    System.out.println(" " + e.getAttribute("email") + ", " +
      e.getAttribute("name") + ", " + e.getText());
  }
  // Sujet
  System.out.println("Sujet : " + tr.findElement(By.xpath(".//div[@class='y6']")).getText());
  // Date
  WebElement dt = tr.findElement(By.xpath("./td[8]/*"));
  System.out.println("Date : " + dt.getAttribute("title") + ", " + dt.getText());
}

System.out.println(rows.size() + " mails.");
driver.quit();

Selenium excelle pour les sites JavaScript-heavy. L'inspecteur facilite les sélecteurs.

Quels projets automatisez-vous avec Selenium ? Partagez vos défis en commentaires !

[]