Xcrap Logo
Exemplos Práticos

Exemplos Avançados

Lidando com Sites Dinâmicos e Protegidos (Amazon, Google, Wikipédia).

Nem todos os sites são fáceis. Alguns exigem JavaScript ou têm proteções complexas.

1. Amazon (Bypass de Detecção e Captcha)

A Amazon é famosa por bloquear bots e exibir captchas. Para burlar essas proteções, usamos o @xcrap/puppeteer-extra-client com plugins de Stealth e resolução de captcha.

import { PuppeteerExtraClient } from "@xcrap/puppeteer-extra-client";
import { HtmlExtractionModel, css, extract } from "@xcrap/extractor";

// Plugins para evasão e resolução de captcha
const StealthPlugin = require("puppeteer-extra-plugin-stealth");
const AmazonCaptchaPlugin = require("@mihnea.dev/puppeteer-extra-amazon-captcha");

async function scrapeAmazon() {
    const client = new PuppeteerExtraClient({
        plugins: [
            StealthPlugin(),
            AmazonCaptchaPlugin()
        ]
    });

    const response = await client.fetch({ url: "https://www.amazon.com/s?k=laptop" });

    const productModel = new HtmlExtractionModel({
        name: { query: css("h2 span"), extractor: extract("innerText") }
    });

    const model = new HtmlExtractionModel({
        products: {
            query: css("[data-component-type='s-search-result']"),
            multiple: true,
            model: productModel
        }
    });

    const parser = response.asHtmlParser();
    const data = await parser.extractModel({ model });
    console.log(data);
}

2. Google Search (Interação Dinâmica)

O Google pode exigir que você simule um usuário real.

import { PuppeteerRealBrowserClient } from "@xcrap/puppeteer-real-browser-client";

async function searchGoogle() {
    const client = new PuppeteerRealBrowserClient();
    await client.launch();
    
    const page = await client.newPage();
    await page.goto("https://www.google.com");
    
    // O PuppeteerRealBrowser lida com os desafios de bot internamente
    await page.type("textarea", "Xcrap framework");
    await page.keyboard.press("Enter");
    
    await page.waitForSelector("#search");
    const html = await page.content();
    
    // Agora você pode usar o HtmlParser com o HTML obtido
    client.close();
}

3. Wikipédia (Dados Estruturados JSON)

Muitas APIs internas da Wikipédia retornam JSON. O Xcrap também suporta extração de JSON!

import { AxiosClient } from "@xcrap/axios-client";
import { JsonParser, JsonExtractionModel } from "@xcrap/extractor";

async function wikipediaInfo() {
    const client = new AxiosClient();
    const response = await client.fetch({ url: "https://en.wikipedia.org/w/api.php?action=query&format=json&titles=Main_Page" });

    // No JSON, a query é o caminho das chaves
    const model = new JsonExtractionModel({
        pageId: {
            query: "query.pages.-1.pageid",
            extractor: (val) => val // Extrator simples
        }
    });

    const parser = response.asJsonParser();
    const result = await parser.extractModel({ model });
    console.log(result);
}

On this page