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

Comment créer un robot d'exploration Web avec Selenium

Web Crawling est extrêmement utile pour automatiser certaines tâches effectuées régulièrement sur les sites Web. Vous pouvez écrire un robot d'exploration pour interagir avec un site Web comme le ferait un humain.

Dans un article précédent, nous avons couvert les bases de l'écriture d'un webcrawler en utilisant le module python, scrapy. La limitation de cette approche est que le robot d'exploration ne prend pas en charge le javascript. Cela ne fonctionnera pas correctement avec les sites Web qui utilisent intensivement javascript pour gérer l'interface utilisateur. Dans de telles situations, vous pouvez écrire un robot d'exploration qui utilise Google Chrome et peut donc gérer le javascript comme un navigateur Chrome normal piloté par l'utilisateur.

L'automatisation de Google Chrome implique l'utilisation d'un outil appelé Selenium . Il s'agit d'un composant logiciel qui se situe entre votre programme et le navigateur et vous aide à piloter le navigateur dans votre programme. Dans cet article, nous vous expliquons le processus complet d'automatisation de Google Chrome. Les étapes comprennent généralement :

  • Configurer Sélénium
  • Utilisation de Google Chrome Inspector pour identifier les sections de la page Web
  • Écrire un programme Java pour automatiser Google Chrome

Aux fins de l'article, examinons comment lire Google Mail à partir de Java. Bien que Google fournisse une API (Application Programming Interface) pour lire le courrier, dans cet article, nous utilisons Selenium pour interagir avec Google Mail afin de démontrer le processus. Google Mail fait un usage intensif de javascript et est donc un bon candidat pour apprendre Selenium.

Configurer Sélénium

Pilote Web

Comme expliqué ci-dessus, Selenium consiste en un composant logiciel qui s'exécute en tant que processus distinct et exécute des actions au nom du programme Java. Ce composant s'appelle Pilote Web et doit être téléchargé sur votre ordinateur.

Cliquez ici pour accéder au site de téléchargement de Selenium, cliquez sur la dernière version et téléchargez le fichier approprié pour le système d'exploitation de votre ordinateur (Windows, Linux ou MacOS). Il s'agit d'une archive ZIP contenant chromedriver.exe . Extrayez-le dans un emplacement approprié tel que C:\WebDrivers\chromedriver.exe . Nous utiliserons cet emplacement plus tard dans le programme Java.

Modules Java

L'étape suivante consiste à configurer les modules Java requis pour utiliser Selenium. En supposant que vous utilisez Maven pour créer le programme Java, ajoutez la dépendance suivante à votre POM.xml .

  

org.seleniumhq.selenium
sélénium-java
3.8.1


Lorsque vous exécutez le processus de génération, tous les modules requis doivent être téléchargés et configurés sur votre ordinateur.

Premiers pas au sélénium

Commençons avec Selenium. La première étape consiste à créer un ChromeDriver instance :

Pilote WebDriver =new ChromeDriver(); 

Cela devrait ouvrir une fenêtre Google Chrome. Naviguons jusqu'à la page de recherche Google.

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

Obtenez une référence à l'élément de saisie de texte afin que nous puissions effectuer une recherche. L'élément de saisie de texte porte le nom q . Nous localisons les éléments HTML sur la page en utilisant la méthode WebDriver.findElement() .

Élément WebElement =driver.findElement(By.name("q")); 

Vous pouvez envoyer du texte à n'importe quel élément en utilisant la méthode sendKeys() . Envoyons un terme de recherche et terminons-le par une nouvelle ligne pour que la recherche commence immédiatement.

element.sendKeys("terminator 
");

Maintenant qu'une recherche est en cours, nous devons attendre la page de résultats. Nous pouvons le faire comme suit :

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

Ce code indique essentiellement à Selenium d'attendre 10 secondes et de revenir lorsque le titre de la page commence par terminator . Nous utilisons une fonction lambda pour spécifier la condition à attendre.

Nous pouvons maintenant obtenir le titre de la page.

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

Une fois que vous avez terminé la session, la fenêtre du navigateur peut être fermée avec :

driver.quit(); 

Et cela, les amis, est une simple session de navigateur contrôlée à l'aide de Java via le sélénium. Cela semble assez simple, mais vous permet de programmer beaucoup de choses que vous auriez normalement à faire à la main.

Utiliser l'inspecteur Google Chrome

Google Chrome Inspector est un outil inestimable pour identifier les éléments à utiliser avec Selenium. Cela nous permet de cibler l'élément exact de java pour extraire des informations ainsi qu'une action interactive telle que cliquer sur un bouton. Voici une introduction à l'utilisation de l'inspecteur.

Ouvrez Google Chrome et accédez à une page, par exemple la page IMDb pour Justice League (2017).

Trouvons l'élément que nous voulons cibler, disons le résumé du film. Faites un clic droit sur le résumé et sélectionnez "Inspecter" dans le menu contextuel.

Comment créer un robot d exploration Web avec Selenium

Dans l'onglet "Éléments", nous pouvons voir que le texte récapitulatif est un div avec une classe de summary_text .

Comment créer un robot d exploration Web avec Selenium

Utilisation de CSS ou XPath pour la sélection

Selenium prend en charge la sélection d'éléments de la page à l'aide de CSS. (Le dialecte CSS pris en charge est CSS2). Par exemple pour sélectionner le texte récapitulatif de la page IMDb ci-dessus, nous écrirons :

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

Vous pouvez également utiliser XPath pour sélectionner des éléments d'une manière très similaire (Allez ici pour les spécifications). Encore une fois, pour sélectionner le texte du résumé, nous ferions :

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

XPath et CSS ont des fonctionnalités similaires, vous pouvez donc utiliser celui avec lequel vous êtes à l'aise.

Lire Google Mail à partir de Java

Examinons maintenant un exemple plus complexe :la récupération de Google Mail.

Démarrez le pilote Chrome, accédez à gmail.com et attendez que la page soit chargée.

Pilote WebDriver =new ChromeDriver(); 
driver.get("https://gmail.com");
nouveau WebDriverWait(pilote, 10)
.until(d -> d.getTitle().toLowerCase().startsWith("gmail"));

Ensuite, recherchez le champ email (il est nommé avec l'id identifierId ) et saisissez l'adresse e-mail. Cliquez sur Suivant et attendez que la page de mot de passe se charge.

/* Saisissez le nom d'utilisateur/e-mail */ 
{
driver.findElement(By.cssSelector("#identifierId")).sendKeys(email);
driver.findElement(By.cssSelector(".RveJvd")).click();
}
nouveau WebDriverWait(pilote, 10)
.until(d -> ! d.findElements(By.xpath("//div[@id='password']")).isEmpty() );

Maintenant, nous entrons le mot de passe, cliquez sur Suivant à nouveau et attendez que la page Gmail se charge.

/* Saisissez le mot de passe */ 
{
chauffeur
.findElement(By.xpath("//div[@id='password']//input[@type='password']"))
.sendKeys(mot de passe);
driver.findElement(By.cssSelector(".RveJvd")).click();
}
nouveau WebDriverWait(pilote, 10)
.until(d -> ! d.findElements(By.xpath("//div[@class='Cp']")).isEmpty() );

Récupérez la liste des lignes d'e-mails et bouclez sur chaque entrée.

Liste lignes =pilote 
.findElements(By.xpath("//div[@class='Cp']//table/tbody/tr"));
pour (WebElement tr :lignes) {
}

Pour chaque entrée, récupérez le De champ. Notez que certaines entrées De peuvent avoir plusieurs éléments en fonction du nombre de personnes dans la conversation.

{ 
/* De l'élément */
System.out.println("De :");
pour (WebElement e :tr
.findElements(By.xpath(".//div[@class='yW']/*"))) {
System.out.println(" " +
e.getAttribute("email") + ", " +
e.getAttribute("nom") + ", " +
e.getText());
}
}

Maintenant, récupérez le sujet.

{ 
/* Sujet */
System.out.println("Sub:" + tr.findElement(By.xpath(".//div[@class='y6']")).getText());
}

Et la date et l'heure du message.

{ 
/* Date/Heure */
WebElement dt =tr.findElement(By.xpath("./td[8]/*"));
System.out.println("Date :" + dt.getAttribute("titre") + ", " +
dt.getText());
}

Voici le nombre total de lignes d'e-mails dans la page.

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

Et enfin, nous avons terminé, nous quittons donc le navigateur.

driver.quit(); 

Pour récapituler, vous pouvez utiliser Selenium avec Google Chrome pour explorer les sites Web qui utilisent beaucoup javascript. Et avec Google Chrome Inspector, il est assez facile de déterminer le CSS ou le XPath requis pour extraire ou interagir avec un élément.

Avez-vous des projets qui bénéficient de l'utilisation de Selenium ? Et à quels problèmes êtes-vous confronté ? Veuillez décrire dans les commentaires ci-dessous.


[]