Maison  >  Article  >  développement back-end  >  PHP et Selenium : un guide pour créer un robot d'exploration Web fiable et efficace

PHP et Selenium : un guide pour créer un robot d'exploration Web fiable et efficace

WBOY
WBOYoriginal
2023-06-15 22:27:142418parcourir

Avec le développement d'Internet, les robots d'exploration sont devenus l'un des principaux moyens d'obtenir des données. Parmi les nombreux langages de robots d'exploration, la combinaison de PHP et Selenium est également devenue une solution qui a beaucoup retenu l'attention. Cet article vous expliquera comment utiliser PHP et Selenium pour créer un robot d'exploration Web fiable et efficace.

1. Introduction à Selenium

Selenium est un framework de test d'automatisation Web qui peut simuler les opérations du navigateur et fournit des implémentations dans plusieurs langages (tels que Java, Python, PHP, etc.) . La version PHP s'appelle php-webdriver. Le rôle principal de Selenium est de tester automatiquement, mais il peut également être utilisé pour les robots d'exploration Web. Par rapport aux bibliothèques de robots d'exploration traditionnelles (telles que les requêtes, Scrapy, etc.), Selenium peut mieux gérer JavaScript et les pages Web dynamiques, améliorant ainsi l'efficacité et la stabilité du robot d'exploration.

2. Installation de Selenium

1 Installer Selenium WebDriver

Vous devez d'abord installer Selenium WebDriver, vous pouvez visiter le site officiel de Selenium http:/ /www.seleniumhq.org/download/Download le pilote correspondant, nous prenons ici Chrome comme exemple.

Après le téléchargement, vous devez placer le fichier du pilote dans le chemin système.

2. Installez php-webdriver

Vous pouvez utiliser Composer pour installer php-webdriver et exécuter la commande suivante :

composer require facebook/webdriver

3. #🎜🎜 #

Une fois l'installation terminée, vous pouvez utiliser php-webdriver pour effectuer des opérations simples, telles que l'ouverture du site Web et l'obtention du titre de la page Web :

<?php

require_once('vendor/autoload.php');
use FacebookWebDriverRemoteRemoteWebDriver;

$host = 'http://localhost:9515'; // 默认Chrome浏览器启动地址
$driver = RemoteWebDriver::create($host, DesiredCapabilities::chrome());

$driver->get('http://github.com');
echo "网页标题:" . $driver->getTitle() . PHP_EOL;
$driver->quit();

3. 🎜🎜#

1. Connectez-vous au site Web

Certains sites Web nécessitent une connexion pour obtenir des données. Voici Github à titre d'exemple. Vous devez d’abord vous connecter manuellement dans le navigateur et conserver la session. Utilisez ensuite cette session dans le robot pour opérer :

<?php

require_once('vendor/autoload.php');
use FacebookWebDriverRemoteRemoteWebDriver;
use FacebookWebDriverRemoteDesiredCapabilities;

// 替换以下参数为自己的github账户和密码
$username = 'yourusername';
$password = 'yourpassword';

// 启动浏览器并登录
$host = 'http://localhost:9515'; // 默认Chrome浏览器启动地址
$driver = RemoteWebDriver::create($host, DesiredCapabilities::chrome());
$driver->get('http://github.com/login');
$driver->findElement(FacebookWebDriverWebDriverBy::cssSelector('input[name="login"]'))->sendKeys($username);
$driver->findElement(FacebookWebDriverWebDriverBy::cssSelector('input[name="password"]'))->sendKeys($password);
$driver->findElement(FacebookWebDriverWebDriverBy::cssSelector('input[type="submit"]'))->click();

// 检查是否登录成功
$cookies = $driver->manage()->getCookies();
if (count($cookies) == 0) {
    echo "登录失败" . PHP_EOL;
    exit;
}

echo "登录成功" . PHP_EOL;

2 Obtenir des données

Après vous être connecté et entré dans la page correspondante, vous pouvez l'obtenir via le sélecteur CSS ou XPath. selector Éléments correspondants, comme obtenir le nombre d'étoiles dans un entrepôt :

<?php

// 获取某仓库star数目
$driver->get('https://github.com/twbs/bootstrap');
$starText = $driver->findElement(FacebookWebDriverWebDriverBy::cssSelector('.js-social-count'))->getText();
$starCount = (int)str_replace(',', '', $starText);
echo "star数目:" . $starCount . PHP_EOL;

Si vous avez besoin d'obtenir plusieurs éléments, vous pouvez utiliser la méthode findElements, qui renvoie un tableau WebDriverElement :

<?php

// 获取某用户的star数目
$driver->get('https://github.com/yourusername?tab=stars');
$stars = $driver->findElements(FacebookWebDriverWebDriverBy::cssSelector('.col-12.d-inline-block>a'));
echo "star数目:" . count($stars) . PHP_EOL;

3. Opération de tournage de page

Si les données sont affichées en pages, une opération de tournage de page peut être nécessaire. Vous pouvez d'abord obtenir le numéro de la page actuelle, puis tourner la page en simulant un clic sur le bouton de la page suivante :

<?php

// Github starred仓库分页
$driver->get('https://github.com/yourusername?tab=stars');
$pageNum = 1;
while (true) {
    echo "第{$pageNum}页:" . PHP_EOL;
    $pageStars = $driver->findElements(FacebookWebDriverWebDriverBy::cssSelector('.col-12.d-inline-block>a'));
    foreach ($pageStars as $star) {
        echo $star->getText() . PHP_EOL;
    }
    
    $nextPageBtn = $driver->findElement(FacebookWebDriverWebDriverBy::cssSelector('.pagination>button:last-child'));
    if ($nextPageBtn->getAttribute('disabled') == 'true') {
        break;
    }
    $nextPageBtn->click();
    $pageNum++;
}

4. Résumé

Grâce à la combinaison de PHP et Selenium, il peut être mieux traité avec du javascript et des pages Web dynamiques, améliorant ainsi l'efficacité et la stabilité du robot d'exploration. Dans le même temps, Selenium fournit également une API riche qui peut facilement mettre en œuvre des opérations telles que la connexion et la rotation des pages. Bien entendu, Selenium présente également certains inconvénients, tels qu'une consommation élevée de ressources et une vitesse relativement lente. La solution à utiliser doit être choisie en fonction des besoins spécifiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn