Dans ce guide, vous apprendrez ce qu’est le curseur fantôme. À la fin de ce tutoriel, vous serez en mesure de répondre aux questions suivantes.
- Qu’est-ce que le curseur fantôme ?
- Avec quels outils Ghost Cursor est-il compatible ?
- Comment le curseur fantôme est-il utilisé ?
- Est-il compatible avec les outils de déblocage (proxies, navigateurs distants, etc.) ?
- Quand Ghost Cursor est-il le bon choix ?
Qu’est-ce que le curseur fantôme et pourquoi s’en préoccuper ?
Ghost Cursor est un plug-in pour Puppeteer. Il vous permet de contrôler le curseur de la souris et d’interagir avec la page en utilisant des mouvements plus humains.
Lorsque vous cliquez sur un bouton avec Puppeteer, le curseur se déplace instantanément vers le bouton et clique dessus. C’est très robotique. Oui, c’est rapide et efficace, mais c’est l’une des nombreuses choses qui vous bloquent souvent lorsque vous scrappez le web.
Avec le curseur fantôme, nous créons un nombre infini de points sur une courbe entre deux points de la page. Le curseur suit ensuite cette courbe depuis son emplacement actuel jusqu’à l’élément cible. Cette courbe a un aspect beaucoup plus humain.
Pour commencer
Avant de commencer à coder, nous supposons que vous avez une connaissance de base de JavaScript. Tout d’abord, nous devons créer un nouveau dossier de projet et initialiser un projet JavaScript.
La commande ci-dessous crée un nouveau dossier et saute dans le répertoire de notre projet.
mkdir your-ghost-cursor-project
cd your-ghost-cursor-project
Vous pouvez utiliser npm init
pour convertir ce nouveau dossier en projet NodeJS. Nous utilisons l’option --y
car il s’agit d’un tutoriel. Nous n’avons pas besoin d’une installation guidée avec des décisions de licence.
npm init --y
Maintenant, nous installons nos dépendances. C’est assez simple – nous n’en avons que deux.
npm install ghost-cursor puppeteer
Utilisation de base du curseur fantôme
Dans le script ci-dessous, nous démontrons l’utilisation de base de Ghost Cursor. Tout d’abord, nous lançons un navigateur à tête pleine – ce n’est pas une obligation, mais vous serez en mesure de voir Ghost Cursor en action.
Après avoir créé une nouvelle page, nous la passons à installMouseHelper()
. Cela nous permet de voir le curseur se déplacer à l’intérieur de la page rendue. Nous créons ensuite un objet curseur. Le curseur obtient l’emplacement du livre et clique dessus.
Enfin, nous prenons une capture d’écran de la page du produit avant de fermer notre navigateur et de quitter le programme.
const puppeteer = require('puppeteer');
const { createCursor, installMouseHelper } = require('ghost-cursor');
//this function holds our runtime
async function run() {
//launch a headed browser to watch ghost cursor in action
const browser = await puppeteer.launch({
headless: false,
});
const page = await browser.newPage();
//this allows you to watch the cursor as it moves around
await installMouseHelper(page);
//create the actual cursor object
const cursor = createCursor(page);
await page.goto("https://books.toscrape.com");
//find the link inside the product pod
const book = await cursor.getElement("article[class='product_pod'] a");
//get its location (x,y) coordinates
const location = cursor.getLocation(book);
//move to the coordinates
await cursor.moveTo(location);
//click on the book
await cursor.click(book);
//take a screenshot of the product page
await page.screenshot({path: "book.png"});
await browser.close();
}
run().catch(console.error);
Méthodes disponibles dans le curseur fantôme
Maintenant que vous avez vu Ghost Cursor en action, voyons ce que font ses différentes méthodes. Chacune d’entre elles est une nouvelle pièce pour votre boîte à outils de scraping.
installMouseHelper()
Nous avons utilisé installMouseHelper()
pour suivre le mouvement de la souris dans le navigateur rendu. Cette méthode vous permet d’observer le curseur en action. Cet élément n’est pas nécessaire pour l’utilisation du curseur et il a besoin d’un navigateur plein de têtes pour fonctionner. Il s’agit plus d’un nouvel élément de débogage que d’un outil utile.
//launch a headed browser to watch ghost cursor in action
const browser = await puppeteer.launch({
headless: false,
});
const page = await browser.newPage();
//this allows you to watch the cursor as it moves around
await installMouseHelper(page);
getElement()
getElement()
fonctionne à peu près de la même manière que page.$()
dans Puppeteer. En fait, nous avons même passé des éléments réguliers de Puppeteer dans d’autres méthodes et le curseur a été bogué, mais il a continué à fonctionner. Pour trouver un élément sur la page, il est préférable d’utiliser cursor.getElement()
.
//find the link inside the product pod
const book = await cursor.getElement("article[class='product_pod'] a");
getLocation()
Une fois que vous avez trouvé un élément, vous avez souvent besoin de récupérer son emplacement. Cette méthode vous permet de récupérer les coordonnées (x,y) de n’importe quel élément de la page avec un minimum de code.
//get its location (x,y) coordinates
const location = cursor.getLocation(book);
déplacer()
move()
est une méthode très pratique. Vous pouvez passer un objet sélecteur ou un élément de page directement dans move()
et le curseur se déplacera jusqu’à lui – naturellement, comme un humain.
//move straight to the book
await cursor.move(book);
//click on the book
await cursor.click(book);
moveTo()
moveTo
vous permet de transmettre des coordonnées directement au curseur. Au lieu de nous déplacer vers le livre, nous utilisons getLocation()
et passons sa sortie dans le curseur avec moveTo().
//move to the coordinates
await cursor.moveTo(location);
//click on the book
await cursor.click(book);
scrollIntoView()
Parfois, il n’est pas nécessaire de déplacer le curseur directement sur un objet, mais simplement de faire défiler la page. La fonction scrollIntoView()
vous permet de passer un sélecteur ou un élément de page et de faire défiler la page jusqu’à ce que votre élément apparaisse dans la fenêtre d’affichage.
//scroll until the book is in the viewport
await cursor.scrollIntoView(book);
//click on the book
await cursor.click(book);
scrollTo()
scrollTo()
est une autre fonction très pratique. Elle vous permet de passer en haut
, en bas
, à gauche
et à droite
. Contrôlez vos mouvements de défilement avec du langage naturel, sans avoir recours à l’intelligence artificielle !
//scroll to the top of the page
await cursor.scrollTo('top');
//click on the book
await cursor.click(book);
défilement()
scroll()
est peut-être la plus basique de nos actions de défilement. Avec scroll, vous passez des coordonnées (x,y) – vous vous souvenez de getLocation()
? Le curseur défile alors jusqu’à ce qu’il soit à l’intérieur de la fenêtre de visualisation.
//move to the coordinates
await cursor.scroll(location);
//click on the book
await cursor.click(book);
Limitations courantes du curseur fantôme
- CAPTCHAs: Ghost Cursor peut vous faire paraître plus humain, mais en fin de compte, c’est toujours vous qui contrôlez le scraper. Jetez un coup d’œil aux 10 meilleurs résolveurs de CAPTCHA pour en savoir plus.
- Marionnettiste: Le curseur Ghost ne supporte officiellement que Puppeteer. Comparé à d’autres navigateurs sans tête comme Selenium et Playwright, Puppeteer est assez limité et manque de fonctionnalités et de maintenance.
- Local uniquement: Ghost Cursor doit être exécuté localement. Cela limite considérablement les options de déblocage. Avec Scraping Browser, vous pouvez exécuter des navigateurs distants sans tête avec une gestion automatisée du proxy et la résolution des CAPTCHA. Parce qu’il ne prend pas en charge la navigation à distance, Ghost Cursor ne peut pas tirer pleinement parti des meilleurs outils disponibles.
Intégration du proxy
Bien qu’il ne prenne pas en charge le navigateur Scraping, Puppeteer s’intègre aux proxys locaux. Puppeteer suit l’authentification standard du proxy avec l’URL de base du proxy, le nom d’utilisateur et le mot de passe.
Le code ci-dessous vous donne un script de base que vous pouvez adapter à n’importe quel runtime Puppeteer/Ghost Cursor. Veillez à remplacer le nom d’utilisateur, le nom de la zone et le mot de passe par vos propres identifiants !
const puppeteer = require('puppeteer');
const { createCursor } = require('ghost-cursor');
async function run() {
const browser = await puppeteer.launch({
headless: false,
args: [
'--proxy-server=http://brd.superproxy.io:33335',
'--ignore-certificate-errors'
]
});
const page = await browser.newPage();
const cursor = createCursor(page);
await page.authenticate({
username: "brd-customer-<your-username>-zone-<your-zone-name>",
password: "<your-password>"
});
await page.goto("https://ipinfo.io");
await cursor.click("a[href='/what-is-my-ip']");
await page.screenshot({path: "ipinfo.png"});
await browser.close();
}
run().catch(console.error);
Comme nous l’avons mentionné, avec Puppeteer et Ghost Cursor, vous ne pouvez pas tirer pleinement parti du navigateur de grattage lui-même. Le tableau ci-dessous montre le coût d’une seule exécution en utilisant le scraper ci-dessus. Le coût est vraiment révélateur.
Lorsque vous gérez vos proxies manuellement, il est préférable d’utiliser une rotation. Comme vous pouvez le voir avec Web Unlocker, ce scrape coûte 0,23 $. Avec une connexion résidentielle, le coût est de 0,05 $ et avec une connexion de centre de données, il n’est que de 0,01 $.
Lorsque vous gérez des proxys avec Ghost Cursor et Puppeteer, utilisez les proxys du centre de données lorsqu’ils sont disponibles. Les proxys résidentiels ne doivent être utilisés que lorsque votre connexion au centre de données est bloquée par le site cible.
Conclusion
Ghost Cursor est un moyen simple et efficace de donner à votre scraper une apparence plus humaine. Lorsque vos défilements et vos clics sont plus naturels, vous avez moins de chances d’être bloqué sur votre site cible. Cet outil fonctionne avec l’intégration générale de proxy, mais il n’est pas compatible avec les navigateurs distants.
Pour les tâches de scraping de base, Ghost Cursor peut ajouter un peu d’humanité à votre code sans trop d’éléments parasites. Jetez un coup d’œil aux produits de scraping mentionnés dans cet article pour améliorer votre scraping dès aujourd’hui.
- Web Unlocker: Résolution automatisée de CAPTCHA et gestion de proxy. Il suffit de le brancher et de continuer à coder.
- Navigateur de raclage: Navigation à distance avec des proxies gérés et un résolveur de CAPTCHA.
- Proxies résidentiels: Acheminez votre trafic via des connexions internet domestiques réelles sur des appareils grand public. Se fondre dans la masse du trafic.
- Proxy de centre de données: matériel haut de gamme avec des connexions rapides comme l’éclair. Récupérez des sites intermédiaires à faible coût.
Inscrivez-vous pour un essai gratuit et commencez dès aujourd’hui !