Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte00:00:00 :Dans cette partie, on va voir comment utiliser le débuggeur de Playwright pour naviguer à traversles différentes pages de recherche de Airbnb. Alors ce que je vais faire, c'est déjà mettre mon URL
00:00:10 :ici qu'on va utiliser à la place de Google pour afficher les résultats d'une requête vers Rio deJaneiro et passer à travers les pages de cette requête pour voir toutes les locations. Donc je
00:00:21 :vais mettre l'URL ici et là je suis toujours avec mon script debug qui a bien cette variabled'environnement pwdebug qui est égal à 1 et qui va lancer donc automatiquement le débuggeur dePlaywright quand on va lancer le script. Avant de lancer le script, je vais mettre un point de
00:00:35 :débug ici pour ne pas fermer directement le navigateur une fois qu'on va être arrivé àcette page. Donc je lance le script en mode debug et ça va ouvrir le débuggeur de Playwright donc
00:00:45 :l'inspecteur ici. Je clique sur la petite flèche pour avancer pour exécuter ce page.go to pourqu'on ait la page qui s'affiche et ensuite on va donc arriver à ce point de débug qui ne va pasexécuter la ligne donc on va suspendre le programme ici pour ne pas fermer le navigateur et si je
00:00:59 :reviens donc dans le Playwright inspecteur avec la page je vais pouvoir cette fois-ci cliquer surrecord pour inspecter la page. Donc là on voit qu'on a premièrement le pop-up pour les cookies
00:01:09 :alors je peux soit cliquer sur ok là on voit que le code qui va nous être retourné c'est un boutonavec le name ok qui est exact alors il se peut qu'il y en ait plusieurs sur la page un boutonavec ok dessus c'est quand même assez commun donc moi je vais préférer cliquer sur continuer sans
00:01:23 :accepter c'est un peu plus spécifique et là on voit qu'on a encore une fois un get by rule avecun bouton sauf que cette fois-ci le nom est plus spécifique donc je clique là dessus pour nepas accepter en fait les cookies dans ce cas-ci et on a bien notre code qui affiche dans l'inspecteur
00:01:38 :le page.getbyrule donc le code qu'on avait d'afficher dans la fenêtre que je vais pouvoirensuite copier dans mon script. Et si on descend ensuite ici on va voir que ce qu'on va pouvoir
00:01:47 :faire c'est naviguer dans les différentes pages en cliquant sur ce bouton donc le bouton qui aun label suivant on pourrait cliquer sur les pages individuellement mais le problème c'estque là en fait on va avoir à chaque fois un nom qui va être différent par exemple un lien ici avec
00:02:01 :name qui est égal à 2 ensuite 3 4 etc donc ce sera un petit peu pénible je pense que de cliquersur la flèche ça va être plus plus spécifique et donc si je clique ici on va aller encore unefois afficher le code dans l'inspecteur qu'on va pouvoir par la suite copier et maintenant il faut
00:02:16 :que je m'assure de ne pas aller plus loin que la page 15 donc ce que je vais faire c'est arrêterle record ici là je n'ai plus besoin de ça je veux juste me rendre sur la 15e page et voir qu'estce qu'on va pouvoir vérifier dans ce cas ci pour s'assurer de ne pas continuer au delà de la page
00:02:31 :15 puisqu'il n'y a plus de pages après. Donc là on voit que j'ai un petit symbole de désactivationet je vais faire cette fois ci un clic droit inspect pour aller vérifier à quoi ressemble cebouton et ce qu'on pourrait avoir comme attribut par exemple dessus pour vérifier si l'attribut
00:02:46 :est présent ou non et arrêter de faire défiler les pages quand cet attribut est présent. Doncje vais cliquer sur la petite flèche ici pour inspecter cet élément donc là on voit qu'on aun svg pour la flèche et si je remonte ici on devrait avoir le bouton en question avec
00:02:59 :effectivement le aria label qui est égal à suivant donc ça c'est ce get by label qui vanous permettre de récupérer le bouton mais si on regarde bien ici on a d'autres attributs assezintéressant on a le disabled qui nous indique que le bouton est désactivé et le aria disabled
00:03:12 :qui est un attribut qui est à true qui nous permet de savoir également que le bouton estdésactivé donc on va pouvoir se servir de ça pour faire une boucle et vérifier quand cet attributest présent ou non pour arrêter de continuer à cliquer sur le bouton quand on va arriver à la
00:03:26 :dernière page. Donc je vais copier ces deux lignes ici je vais faire ctrl c et je vais arrêter monscript et on va pouvoir coller ces lignes à la suite de notre goto pour effectuer ces actionsdonc notamment cliquer sur le bouton continuer sans accepter et ce get by label on va pour
00:03:40 :l'instant le couper puisqu'on va le mettre à l'intérieur d'une boucle pour à chaque foiscliquer sur ce bouton tant qu'on n'a pas ce fameux attribut aria disabled qui est à true. Donc je
00:03:49 :vais faire une boucle true puisque on ne sait pas encore combien de fois elle va boucler donc cequ'on va faire c'est partir sur le postulat que l'on va continuer de boucler tant qu'on n'a pasrencontré ce aria disabled qui est égal à true et si c'est le cas on fera un break pour sortir de
00:04:04 :cette boucle while. Donc ce que je vais faire c'est ici récupérer avec le get by label le bouton doncje vais par exemple dire next page button et je vais enlever le clic puisque pour l'instant je neveux pas cliquer dessus je veux juste le récupérer pour ensuite pouvoir faire une petite vérification
00:04:18 :ici par rapport à l'attribut dont on a parlé. Donc je vais vérifier avec if si sur next pagebutton on a cet attribut donc pour ça on peut utiliser la méthode get attribute comme ceci eton va lui passer le nom de l'attribut qui dans ce cas ci est aria disabled. Si cet attribut est
00:04:34 :égal à true donc à la chaîne de caractère true et bien on va faire un break. Alors attention icic'est bien la chaîne de caractère ça ne va pas être un booléen puisque ici l'attribut on est avecdu html tout ça ça va nous retourner des valeurs en chaîne de caractère donc là on vérifie bien
00:04:49 :que c'est la chaîne de caractère true avec ici un t minuscule on pourrait mettre un lower ici pours'assurer qu'on a bien cette valeur qui est récupérée en minuscule aussi mais comme on l'a vu dans lecode html elle était déjà en minuscule donc je vais faire juste cette vérification ici. Donc si
00:05:04 :ce n'est pas le cas si on n'a pas cet attribut aria disabled ça veut dire que le bouton est actifet qu'on peut donc cliquer dessus pour passer à la prochaine page. Donc je vais faire next page
00:05:12 :button.click pour cliquer sur le bouton et on va vérifier que tout ça fonctionne en mettant unpoint de debug ici sur le while et en relançant notre script. Alors cette fois ci je vais enlever
00:05:22 :je vais peut-être même créer une nouvelle configuration ça va être plus simple je vaissélectionner le script debug ici et on va cliquer ici pour copier cette configuration et là je vaismettre script without debug et on va enlever ce pwdebug égal à 1 pour pouvoir lancer notrescript sans la vue de debug. Donc je vais lancer par contre le debug au niveau de PyCharm pour
00:05:44 :qu'il s'arrête ici au niveau de ma boucle while et qu'on vérifie que tout fonctionne correctement.Donc je relance le script j'ai bien la vue de debug qui cette fois ci n'est plus affichée mais jerentre bien donc dans la boucle on a le while et le script qui s'arrête donc je vais rafficher
00:05:57 :cette page ici je vais faire un petit peu de place je vais mettre la page ici sur la droiteet PyCharm sur la gauche on va vérifier que tout fonctionne correctement. Donc je continue je fais
00:06:07 :un step over pour continuer sur le bouton on va vérifier que le bouton est bien récupéré donclà on a bien un locator si je fais un view ça ressemble pas mal à ce qu'on avait avec l'urlici qui est l'url de la page suivante on a le sélector avec le bouton enfin le texte suivant
00:06:22 :et si je continue on va vérifier si on rentre ou non dans le next page button.getAttribute doncce n'est pas le cas puisque l'attribut n'est pas présent et on continue bien sur le clic donc jecontinue on va revenir au niveau de la boucle while et je vais vérifier dans le navigateur qu'on est
00:06:37 :bien passé à la page 2 et c'est bien le cas. Donc je vais continuer comme ça je vais pas le faire àchaque fois puisque là ça sera un petit peu long de se rendre jusqu'à la page 15 comme ça donc ceque je vais faire c'est juste changer mon point de debug pour le mettre sur le break ici et l'enlever
00:06:50 :sur la boucle while et cette fois ci plutôt que de faire un step over pour continuer ligne par ligneje vais faire un resume program avec ce bouton pour résumer le programme et il va normalements'arrêter uniquement quand on sera rentré à l'intérieur de cette structure conditionnelledonc du if ici donc je fais un resume je lance on attend un petit peu et normalement voilà on est
00:07:09 :arrivé au niveau du break et si je descends ici on devrait être exactement comme on l'avait prévuà la page 15 puisque le bouton est cette fois ci désactivé donc je continue là cette fois ci jevais faire un step over on arrive bien au niveau du browser.close et je vais continuer donc en
00:07:23 :faisant un resume program et on devrait voilà arriver à la fin du programme. Donc ça fonctionnecorrectement on passe bien à travers chaque page pour relancer le script sans le debug on peutmettre d'autres prints ici on pourrait mettre par exemple ici un numéro de page pour que ce soit un
00:07:37 :peu plus explicite donc je vais dire page number égale à 1 et ensuite on va incrémenter ce pagenumber qu'on va faire plus égale 1 on va faire print et on va dire navigating to page et on vainsérer le numéro de la page ici donc page number je vais même mettre ça directement ici voilà au
00:07:54 :début pour indiquer qu'on navigue vers la page qui contient page number. Donc on va essayer ça on vale relancer sans le debug et sans le mode debug ici donc script without debug avec la flèche debase et là voilà on ouvre la navigation on passe à travers chaque page là vous voyez que c'est
00:08:09 :assez rapide donc on pourrait pour avoir un scrapping un peu plus éthique rajouter destimer donc par exemple ici faire un page.wait for timeout et mettre un timeout de une seconde
00:08:20 :entre chaque page on pourrait également rentrer une valeur aléatoire avec la bibliothèque randompour que ce soit encore plus similaire à ce que ferait un humain et je vais également changer leheadless pour le mettre à true cette fois-ci pour vous montrer qu'on peut faire le scrapping sansavoir besoin d'ouvrir le navigateur. Donc je relance le script et là on devrait avoir un
00:08:37 :script qui va nous afficher voilà la navigation vers les pages avec vous le voyez à chaque foisun temps d'attente d'une seconde entre chaque page. Donc tout fonctionne correctement et on
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.