Web Scraping mit Ghost Cursor im Jahr 2025

Machen Sie Ihren Web Scraper mit Ghost Cursor und Puppeteer weniger auffindbar. Erfahren Sie, wie Sie ihn einrichten und für ein menschenähnliches Scrapen verwenden.
8 min lesen
Web Scraping with Ghost Cursor

In dieser Anleitung erfahren Sie mehr über Ghost Cursor. Wenn Sie das Tutorial beendet haben, werden Sie in der Lage sein, die folgenden Fragen zu beantworten.

  • Was ist Ghost Cursor?
  • Mit welchen Tools ist Ghost Cursor kompatibel?
  • Wie wird Ghost Cursor verwendet?
  • Ist es kompatibel mit Entsperrungstools (Proxies, Remote-Browser usw.)?
  • Wann ist Ghost Cursor die richtige Wahl?

Was ist Ghost Cursor und warum sollte es Sie interessieren?

Ghost Cursor ist ein Plug-in für Puppeteer. Es ermöglicht Ihnen, den Mauszeiger zu steuern und Seiteninteraktionen mit menschenähnlichen Bewegungen durchzuführen.

Wenn Sie mit Puppeteer auf eine Schaltfläche klicken, bewegt sich der Cursor sofort auf die Schaltfläche und klickt sie an. Das ist sehr roboterhaft. Ja, es ist schnell und effizient, aber es ist eines der vielen Dinge, die Sie beim Scrapen des Webs oft blockieren.

Wie sich der Cursor in Puppeteer bewegt

Mit Ghost Cursor erstellen wir eine unendliche Anzahl von Punkten auf einer Kurve zwischen zwei Punkten auf der Seite. Der Cursor folgt dann dieser Kurve von seiner aktuellen Position zu Ihrem Zielelement. Diese Kurve sieht sehr viel menschlicher aus.

Wie sich der Cursor mit Ghost Cursor bewegt

Erste Schritte

Bevor wir mit dem Programmieren beginnen, gehen wir davon aus, dass Sie mit JavaScript vertraut sind. Zunächst müssen wir einen neuen Projektordner erstellen und ein JavaScript-Projekt initialisieren.

Der folgende Befehl erstellt einen neuen Ordner und springt in unser Projektverzeichnis.

mkdir your-ghost-cursor-project
cd your-ghost-cursor-project

Sie können npm init verwenden, um diesen neuen Ordner in ein NodeJS-Projekt zu konvertieren. Wir verwenden das --y Flag, weil dies ein Tutorial ist. Wir brauchen keine sofortige Einrichtung mit Lizenzierungsentscheidungen.

npm init --y

Jetzt installieren wir unsere Abhängigkeiten. Ziemlich einfach – wir haben nur zwei.

npm install ghost-cursor puppeteer

Grundlegende Verwendung des Ghost Cursors

Im folgenden Skript demonstrieren wir die grundlegende Verwendung von Ghost Cursor. Zunächst starten wir einen Headful-Browser – dies ist keine Voraussetzung, aber Sie werden Ghost Cursor in Aktion sehen können.

Nachdem wir eine neue Seite erstellt haben, übergeben wir sie an installMouseHelper(). Dies ermöglicht es uns, die Bewegung des Cursors innerhalb der gerenderten Seite zu sehen. Anschließend erstellen wir ein Cursor-Objekt. Der Cursor erhält die Position des Buches und klickt dann darauf.

Zum Schluss machen wir einen Screenshot der Produktseite, bevor wir unseren Browser schließen und das Programm beenden.

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);

Verfügbare Methoden in Ghost Cursor

Jetzt, wo Sie Ghost Cursor in Aktion gesehen haben, wollen wir uns ansehen, was die einzelnen Methoden tun. Jede von ihnen ist ein neues Element für Ihren Scraping-Werkzeugkasten.

installMouseHelper()

Wir haben installMouseHelper() verwendet, um die Mausbewegung innerhalb des gerenderten Browsers zu verfolgen. Mit dieser Methode können Sie den Cursor in Aktion beobachten. Diese Funktion ist für die Verwendung des Cursors nicht erforderlich und benötigt einen Browser mit Kopfdaten, um zu funktionieren. Es handelt sich eher um ein neuartiges Debugging-Teil als um ein nützliches Werkzeug.

//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() funktioniert ziemlich genau so wie page.$() in Puppeteer. Tatsächlich haben wir sogar reguläre Puppeteer-Elemente an andere Methoden übergeben und der Cursor war fehlerhaft, funktionierte aber weiterhin. Wenn man ein Element auf der Seite sucht, ist es am besten, cursor.getElement() zu verwenden.

//find the link inside the product pod
const book = await cursor.getElement("article[class='product_pod'] a");

getLocation()

Wenn Sie ein Element gefunden haben, müssen Sie oft seine Position abfragen. Mit dieser Methode können Sie die (x,y)-Koordinaten eines beliebigen Seitenelements mit minimalem Code abrufen.

//get its location (x,y) coordinates
const location = cursor.getLocation(book);

move()

move() ist eine sehr praktische Methode. Sie können ein Selektorobjekt oder ein Seitenelement direkt an move() übergeben, und der Cursor bewegt sich dorthin – natürlich, wie ein Mensch.

//move straight to the book
await cursor.move(book);

//click on the book
await cursor.click(book);

moveTo()

Mit moveTo können Sie Koordinaten direkt an den Cursor übergeben. Anstatt sich zum Buch zu bewegen, verwenden wir getLocation() und übergeben dessen Ausgabe mit moveTo() an den Cursor.

//move to the coordinates
await cursor.moveTo(location);

//click on the book
await cursor.click(book);

scrollIntoView()

Manchmal möchte man den Cursor nicht direkt über ein Objekt bewegen. Möglicherweise müssen Sie nur die Seite scrollen. Mit scrollIntoView() können Sie einen Selektor oder ein Seitenelement übergeben und so lange scrollen, bis Ihr Element im Ansichtsfenster erscheint.

//scroll until the book is in the viewport
await cursor.scrollIntoView(book);

//click on the book
await cursor.click(book);

scrollTo()

scrollTo() ist eine weitere sehr praktische Funktion. Sie erlaubt die Übergabe von oben, unten, links und rechts. Steuern Sie Ihre Scroll-Bewegungen mit natürlicher Sprache, keine KI erforderlich!

//scroll to the top of the page
await cursor.scrollTo('top');

//click on the book
await cursor.click(book);

scroll()

scroll() ist vielleicht die einfachste unserer Bildlaufaktionen. Mit scroll, übergeben Sie (x,y) Koordinaten – erinnern Sie sich an getLocation()? Dann scrollt der Cursor, bis er sich innerhalb des Viewports befindet.

//move to the coordinates
await cursor.scroll(location);

//click on the book
await cursor.click(book);

Allgemeine Einschränkungen von Ghost Cursor

  • CAPTCHAs: Ghost Cursor kann Sie menschlicher erscheinen lassen, aber am Ende des Tages sind Sie immer noch derjenige, der den Scraper kontrolliert. Werfen Sie einen Blick auf die Top 10 CAPTCHA-Löser, um mehr zu erfahren.
  • Puppeteer: Ghost Cursor unterstützt offiziell nur Puppeteer. Im Vergleich zu anderen Headless-Browsern wie Selenium und Playwright ist Puppeteer ziemlich eingeschränkt und es mangelt an Funktionen und Wartung.
  • Nur lokal: Ghost Cursor muss lokal ausgeführt werden. Dies schränkt die Entsperrungsmöglichkeiten stark ein. Mit Scraping Browser können Sie Remote-Headless-Browser mit automatischer Proxy-Verwaltung und CAPTCHA-Auflösung ausführen. Da Ghost Cursor das Remote-Browsing nicht unterstützt, kann es die Vorteile der besten verfügbaren Tools nicht voll ausschöpfen.

Proxy-Integration

Puppeteer unterstützt zwar keinen Scraping-Browser, lässt sich aber mit lokalen Proxys integrieren. Puppeteer folgt der Standard-Proxy-Authentifizierung mit Ihrer grundlegenden Proxy-URL, Ihrem Benutzernamen und Passwort.

Der nachstehende Code bietet Ihnen ein grundlegendes Skript, das Sie für jede Puppeteer/Ghost Cursor-Laufzeit anpassen können. Stellen Sie sicher, dass Sie den Benutzernamen, den Zonennamen und das Passwort durch Ihre eigenen Anmeldedaten ersetzen!

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);

Wie bereits erwähnt, können Sie mit Puppeteer und Ghost Cursor die Vorteile von Scraping Browser selbst nicht voll ausschöpfen. Die nachstehende Aufschlüsselung zeigt die Kosten für einen einzigen Durchlauf mit dem oben genannten Scraper. Die Kosten sind ein echter Augenöffner.

Kostenaufschlüsselung für Ghost Cursor mit Proxys

Wenn Sie Ihre Proxys manuell verwalten, ist es am besten, eine Rotation zu verwenden. Wie Sie mit Web Unlocker sehen können, kostet die Durchführung dieses Scraps $0,23. Mit einer privaten Verbindung waren es $0,05 und mit einer Rechenzentrumsverbindung nur $0,01.

Bei der Verwaltung von Proxys mit Ghost Cursor und Puppeteer sollten Sie, wenn möglich, Rechenzentrums-Proxys verwenden. Residential Proxies sollten nur verwendet werden, wenn die Verbindung zum Rechenzentrum von der Zielsite blockiert wird.

Schlussfolgerung

Ghost Cursor ist eine einfache und effektive Methode, um Ihren Scraper menschlicher erscheinen zu lassen. Wenn Ihre Scrolls und Klicks natürlicher wirken, ist die Wahrscheinlichkeit geringer, dass Sie von Ihrer Zielseite blockiert werden. Dieses Tool funktioniert mit der allgemeinen Proxy-Integration, ist aber nicht mit Remote-Browsern kompatibel.

Für grundlegende Scraping-Aufgaben kann Ghost Cursor Ihrem Code ohne viel Boilerplate etwas Menschlichkeit hinzufügen. Werfen Sie einen Blick auf die in diesem Artikel erwähnten Scraping-Produkte, um Ihr Scraping noch heute zu verbessern.

  • Web Unlocker: Automatisierte CAPTCHA-Auflösung und Proxy-Verwaltung. Schließen Sie es einfach an und fahren Sie mit dem Programmieren fort.
  • Scraping-Browser: Remote-Browsing mit verwalteten Proxies und einem CAPTCHA-Löser.
  • Proxys für Privatanwender: Leiten Sie Ihren Datenverkehr über echte private Internetverbindungen auf Endgeräten. Mischen Sie sich unter den besten Verkehr.
  • Datacenter Proxies: High-End-Hardware mit blitzschnellen Verbindungen. Scrapen Sie Zwischenstandorte zu niedrigen Kosten.

Melden Sie sich für eine kostenlose Testversion an und legen Sie noch heute los!