Web Scraping com o Ghost Cursor em 2025

Torne seu raspador da Web menos detectável usando o Ghost Cursor com o Puppeteer. Descubra como configurá-lo e usá-lo para uma raspagem mais humana.
9 min de leitura
Web Scraping with Ghost Cursor

Neste guia, você aprenderá sobre o Ghost Cursor. Ao terminar o tutorial, você será capaz de responder às seguintes perguntas.

  • O que é o Ghost Cursor?
  • Com quais ferramentas o Ghost Cursor é compatível?
  • Como o Ghost Cursor é usado?
  • Ele é compatível com ferramentas de desbloqueio (proxies, navegadores remotos etc.)?
  • Quando a Ghost Cursor é a escolha certa?

O que é o Ghost Cursor e por que você deve se preocupar?

O Ghost Cursor é um plug-in para o Puppeteer. Ele permite controlar o cursor do mouse e fazer interações com a página usando movimentos mais semelhantes aos humanos.

Quando você clica em um botão com o Puppeteer, o cursor se move para o botão instantaneamente e clica nele. Isso é muito robótico. Sim, é rápido e eficiente, mas é uma das muitas coisas que muitas vezes fazem com que você seja bloqueado ao raspar a Web.

Como o cursor se move no Puppeteer

Com o Ghost Cursor, criamos uma quantidade infinita de pontos em uma curva entre dois pontos na página. O cursor segue essa curva de seu local atual até o elemento de destino. Essa curva parece muito mais humana.

Como o cursor se move com o Ghost Cursor

Primeiros passos

Antes de começarmos a codificar, presumimos que você tenha uma familiaridade básica com JavaScript. Primeiro, precisamos criar uma nova pasta de projeto e inicializar um projeto JavaScript.

O comando abaixo cria uma nova pasta e entra em nosso diretório de projeto.

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

Você pode usar o npm init para converter essa nova pasta em um projeto NodeJS. Usamos o sinalizador --y porque este é um tutorial. Não precisamos de uma configuração pronta com decisões de licenciamento.

npm init --y

Agora, vamos instalar nossas dependências. Bastante simples – temos apenas duas.

npm install ghost-cursor puppeteer

Uso básico do Ghost Cursor

No script abaixo, demonstramos o uso básico do Ghost Cursor. Primeiro, iniciamos um navegador headful – isso não é um requisito, mas você poderá ver o Ghost Cursor em ação.

Depois de criar uma nova página, nós a passamos para installMouseHelper(). Isso nos permite visualizar o movimento do cursor dentro da página renderizada. Em seguida, criamos um objeto cursor. O cursor obtém a localização do livro e, em seguida, clica nele.

Por fim, tiramos uma captura de tela da página do produto antes de fechar o navegador e sair do programa.

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étodos disponíveis no Ghost Cursor

Agora que você já viu o Ghost Cursor em ação, vamos dar uma olhada no que seus métodos individuais fazem. Cada um deles é uma nova peça para sua caixa de ferramentas de raspagem.

installMouseHelper()

Usamos installMouseHelper() para rastrear o movimento do mouse dentro do navegador renderizado. Esse método permite que você observe o cursor em ação. Essa parte não é necessária para o uso do cursor e precisa de um navegador completo para ser executada. Trata-se mais de uma nova peça de depuração do que de uma ferramenta útil.

//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() funciona praticamente da mesma forma que page.$() funciona no Puppeteer. Na verdade, até passamos elementos regulares do Puppeteer para outros métodos e o cursor apresentou erros, mas continuou a funcionar. Ao localizar um elemento na página, é melhor usar cursor.getElement().

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

getLocation()

Depois de encontrar um elemento, você geralmente precisa recuperar sua localização. Esse método permite que você recupere as coordenadas (x,y) de qualquer elemento da página com o mínimo de código.

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

mover()

move() é um método muito conveniente. Você pode passar um objeto seletor ou um elemento de página diretamente para move() e o cursor se moverá até ele – naturalmente, como um ser humano.

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

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

moveTo()

moveTo permite que você passe as coordenadas diretamente para o cursor. Em vez de mover para o livro, usamos getLocation() e passamos sua saída para o cursor com moveTo().

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

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

scrollIntoView()

Às vezes, você não quer mover o cursor diretamente sobre um objeto. Talvez você precise apenas rolar a página. scrollIntoView() permite que você passe um seletor ou elemento de página e role até que o elemento apareça dentro da janela de visualização.

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

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

scrollTo()

scrollTo() é outra opção muito conveniente. Ele permite que você passe para cima, para baixo, para a esquerda e para a direita. Controle seus movimentos de rolagem com linguagem natural, sem necessidade de IA!

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

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

rolagem()

scroll() é talvez a mais básica de nossas ações de rolagem. Com o scroll, você passa as coordenadas (x,y) – lembra-se de getLocation()? Em seguida, o cursor rola até que esteja dentro da janela de visualização.

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

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

Limitações comuns do Ghost Cursor

  • CAPTCHAs: O Ghost Cursor pode fazer com que você pareça mais humano, mas, no final das contas, ainda é você quem controla o scraper. Dê uma olhada nos 10 principais solucionadores de CAPTCHA para saber mais.
  • Titereiro: O cursor Ghost suporta oficialmente apenas o Puppeteer. Em comparação com outros navegadores sem cabeça, como o Selenium e o Playwright, o Puppeteer é bastante limitado e carece de recursos e manutenção.
  • Somente local: O Ghost Cursor precisa ser executado localmente. Isso limita muito as opções de desbloqueio. Com o Scraping Browser, você pode executar navegadores remotos sem cabeça com gerenciamento automatizado de proxy e solução de CAPTCHA. Como não oferece suporte à navegação remota, o Ghost Cursor não pode tirar o máximo proveito das melhores ferramentas disponíveis.

Integração de proxy

Embora não seja compatível com o navegador de raspagem, o Puppeteer se integra com proxies locais. O Puppeteer segue a autenticação de proxy padrão com seu URL de proxy básico, nome de usuário e senha.

O código abaixo fornece um script básico que pode ser ajustado para qualquer tempo de execução do Puppeteer/Ghost Cursor. Certifique-se de substituir o nome de usuário, o nome da zona e a senha por suas próprias credenciais!

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

Conforme mencionado, com o Puppeteer e o Ghost Cursor, você não pode aproveitar ao máximo o próprio navegador de raspagem. O detalhamento abaixo mostra o custo de uma única execução usando o raspador acima. O custo é realmente revelador.

Detalhamento do custo do Ghost Cursor com Proxies

Ao gerenciar seus proxies manualmente, é melhor usar uma rotação. Como você pode ver com o Web Unlocker, esse scrape custa US$ 0,23 para ser executado. Com uma conexão residencial, foi de US$ 0,05 e com uma conexão de data center, custa apenas US$ 0,01.

Ao gerenciar proxies com o Ghost Cursor e o Puppeteer, use proxies de datacenter quando disponíveis. Os proxies residenciais devem ser usados somente quando a conexão do datacenter for bloqueada pelo site de destino.

Conclusão

O Ghost Cursor é uma maneira simples e eficaz de fazer com que seu scraper pareça mais humano. Quando seus scrolls e cliques são mais naturais, é menos provável que você seja bloqueado no site de destino. Essa ferramenta funciona com integração geral de proxy, mas não é compatível com navegadores remotos.

Para tarefas básicas de raspagem, o Ghost Cursor pode adicionar um pouco de humanidade ao seu código sem muito boilerplate. Dê uma olhada nos produtos de raspagem mencionados neste artigo para elevar o nível da sua raspagem hoje.

  • Web Unlocker: Solução automatizada de CAPTCHA e gerenciamento de proxy. Basta conectá-lo e continuar codificando.
  • Navegador de raspagem: Navegação remota com proxies gerenciados e um solucionador de CAPTCHA.
  • Proxies residenciais: Roteie seu tráfego por meio de conexões de Internet domésticas reais em dispositivos de consumidores. Misture-se com o melhor do tráfego.
  • Proxies de data center: hardware de ponta com conexões extremamente rápidas. Extraia sites intermediários a baixo custo.

Inscreva-se para uma avaliação gratuita e comece hoje mesmo!