DocumentaçãoWeb UnlockerRenderização de JS

JS Render

A API do Web Unlocker é um poderoso serviço de recuperação de conteúdo web que oferece suporte a cenários complexos de renderização e interação com páginas web.

Consulte nossa documentação da API para obter o conteúdo detalhado.

Estrutura da Requisição

{
  "actor": "unlocker.webunlocker",
  "proxy": {
    "country": "ANY",
    "url": ""
  },
  "input": {
    "url": "string",
    "jsRender": {
      "enabled": true,
      "headless": true,
      "waitUntil": "domcontentloaded",
      "instructions": [],
      "block": {
        "resources": [],
        "urls": []
      },
      "response": {
        "type": "html",
        "options": {}
      }
    }
  }
}

Recursos Principais

Renderização de JavaScript

A renderização de JavaScript permite lidar com conteúdo carregado dinamicamente e SPAs (Single Page Applications). Ativa um ambiente de navegador completo, oferecendo suporte a interações de página e requisitos de renderização mais complexos.

input.jsRender.enabled=true, usaremos o navegador para fazer a requisição.

{
  "actor": "unlocker.webunlocker",
  "proxy": {
    "country": "ANY"
  },
  "input": {
    "url": "https://example.com/",
    "jsRender": {
      "enabled": true
    }
  }
}

Instruções JavaScript

Fornece um conjunto abrangente de diretivas JavaScript que permitem interagir dinamicamente com páginas web.

Essas diretivas permitem clicar em elementos, preencher formulários, enviar formulários ou aguardar o surgimento de elementos específicos, oferecendo flexibilidade para tarefas como clicar em um botão “ler mais” ou enviar um formulário.

{
  "actor": "unlocker.webunlocker",
  "input": {
    "url": "https://example.com",
    "jsRender": {
      "enabled": true,
      "instructions": [
        {
          "waitFor": [
            ".dynamic-content",
            30000
          ]
          // Wait for element
        },
        {
          "click": [
            "#load-more",
            1000
          ]
          // Click element
        },
        {
          "fill": [
            "#search-input",
            "search term"
          ]
          // Fill form
        },
        {
          "keyboard": [
            "press",
            "Enter"
          ]
          // Simulate key press
        },
        {
          "evaluate": "window.scrollTo(0, document.body.scrollHeight)"
          // Execute custom JS
        }
      ]
    }
  }
}

Aqui estão algumas ações comuns que você pode realizar com as Instruções JavaScript:

Referência das Instruções JavaScript

InstruçãoSintaxeDescriçãoExemplo
waitFor[selector, timeout]Aguardar o elemento aparecer{"waitFor": [".content", 30000]}
click[selector, delay]Clicar no elemento{"click": [".button", 1000]}
fill[selector, value]Preencher formulário{"fill": ["#input", "text"]}
waitmillisecondsTempo de espera fixo{"wait": 2000}
evaluatejavascript codeExecutar código JS{"evaluate": "console.log('test')"}
keyboard[action, value, delay?]Operação de tecladoVeja a tabela de operações de teclado abaixo

Operações de Teclado

OperaçãoSintaxeDescriçãoExemplo
Pressionar tecla["press", keyInput]Pressionar um keyInput específico{"keyboard": ["press", "Enter"]}
Digitar texto["type", text, delay?]Digitar texto com atraso opcional{"keyboard": ["type", "Hello", 20]}
Tecla pressionada["down", key]Manter uma tecla pressionada{"keyboard": ["down", "Shift"]}
Tecla liberada["up", key]Liberar uma tecla{"keyboard": ["up", "Shift"]}

Tipos de KeyInput especiais suportados: https://pptr.dev/api/puppeteer.keyinput

Tipo de Resposta

Você pode especificar o tipo de resposta por meio do parâmetro input.jsRender.response.type; os valores opcionais são: html | plaintext | markdown | png | jpeg | network | content, sendo o valor padrão html:

typedescrição
htmlstring HTML bruta e escapada da página, com suporte a seletor CSS
plaintextstring de texto simples da página, com suporte a seletor CSS
markdownstring Markdown escapada da página, com suporte a seletor CSS
pngstring codificada em base64 da página no formato png, com suporte a seletor CSS
jpegstring codificada em base64 da página no formato jpeg, com suporte a seletor CSS
networkativa a captura de requisições de rede; coletará todas as requisições XHR e fetch feitas durante o carregamento da página e retornará seus detalhes em formato de string JSON escapada, não oferece suporte a seletor CSS
contentfiltra dados do conteúdo da página; retorna os resultados em formato de string JSON escapada

Os detalhes são os seguintes

HTML

Usado para extrair o conteúdo HTML de uma página, o que funciona melhor para páginas puramente estáticas, e retorna o conteúdo em formato de string HTML escapada.

Adicione input.jsRender.response.type=html à requisição:

const axios = require('axios');
const fs = require('fs');
 
(async () => {
    const payload = {
        actor: "unlocker.webunlocker",
        proxy: {
            country: "ANY"
        },
        input: {
            url: "https://www.example.com",
            jsRender: {
                enabled: true,
                response: {
                    type: "html"
                }
            }
        }
    };
 
    const response = await axios.post("https://api.scrapeless.com/api/v2/unlocker/request", payload, {
        headers: {
            "x-api-token": "API Key",
            "Content-Type": "application/json"
        },
        timeout: 60000
    });
 
    if (response.data?.code === 200) {
        fs.writeFileSync('response.html', response.data.data, 'utf8');
    }
})();

Retorna o conteúdo de texto em formato HTML.

{
    "code": 200,
    "data": "<!DOCTYPE html><html><head>\n    <title>Example Domain</title>\n\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <style type=\"text/css\">\n    body {\n        background-color: #f0f0f2;\n        margin: 0;\n        padding: 0;\n        font-family: -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n        \n    }\n    div {\n        width: 600px;\n        margin: 5em auto;\n        padding: 2em;\n        background-color: #fdfdff;\n        border-radius: 0.5em;\n        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);\n    }\n    a:link, a:visited {\n        color: #38488f;\n        text-decoration: none;\n    }\n    @media (max-width: 700px) {\n        div {\n            margin: 0 auto;\n            width: auto;\n        }\n    }\n    </style>    \n</head>\n\n<body>\n<div>\n    <h1>Example Domain</h1>\n    <p>This domain is for use in illustrative examples in documents. You may use this\n    domain in literature without prior coordination or asking for permission.</p>\n    <p><a href=\"https://www.iana.org/domains/example\">More information...</a></p>\n</div>\n\n\n</body></html>"
}

Exemplo do conteúdo do arquivo HTML após salvar:

<!DOCTYPE html><html><head>
    <title>Example Domain</title>
 
    <meta charset="utf-8">
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style type="text/css">
    body {
        background-color: #f0f0f2;
        margin: 0;
        padding: 0;
        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
 
    }
    div {
        width: 600px;
        margin: 5em auto;
        padding: 2em;
        background-color: #fdfdff;
        border-radius: 0.5em;
        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
    }
    a:link, a:visited {
        color: #38488f;
        text-decoration: none;
    }
    @media (max-width: 700px) {
        div {
            margin: 0 auto;
            width: auto;
        }
    }
    </style>
</head>
 
<body>
<div>
    <h1>Example Domain</h1>
    <p>This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.</p>
    <p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
 
</body></html>

Plaintext

O recurso de texto simples é uma opção de saída que retorna o conteúdo extraído em formato de texto simples, em vez de HTML ou Markdown. Esse recurso é extremamente prático quando é necessária uma versão limpa e sem formatação do conteúdo (livre de quaisquer tags HTML ou formatação Markdown). Ele simplifica o processo de extração de conteúdo, tornando o processamento ou a análise de texto mais conveniente.

Adicione input.jsRender.response.type=plaintext à requisição:

const axios = require('axios');
const fs = require('fs');
 
(async () => {
    const payload = {
        actor: "unlocker.webunlocker",
        proxy: {
            country: "ANY"
        },
        input: {
            url: "https://www.example.com",
            jsRender: {
                enabled: true,
                response: {
                    type: "plaintext"
                }
            }
        }
    };
 
    const response = await axios.post("https://api.scrapeless.com/api/v2/unlocker/request", payload, {
        headers: {
            "x-api-token": "API Key",
            "Content-Type": "application/json"
        },
        timeout: 60000
    });
 
    if (response.data?.code === 200) {
        fs.writeFileSync('response.txt', response.data.data, 'utf8');
    }
})();

Retorna o conteúdo de texto simples da página como uma string. Veja o exemplo abaixo.

{
    "code": 200,
    "data": "Example Domain\n\nThis domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.\n\nMore information..."
}

Exemplo do conteúdo do arquivo txt após salvar:

Example Domain

This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.

More information...

Markdown

Para extrair o conteúdo da página em formato Markdown, páginas Markdown puramente estáticas funcionam melhor; a API do Web Unlocker retornará o conteúdo em formato Markdown, tornando-o mais legível e fácil de processar.

Adicione input.jsRender.response.type=markdown à requisição:

const axios = require('axios');
const fs = require('fs');
 
(async () => {
    const payload = {
        actor: "unlocker.webunlocker",
        proxy: {
            country: "ANY"
        },
        input: {
            url: "https://www.example.com",
            jsRender: {
                enabled: true,
                response: {
                    type: "markdown"
                }
            }
        }
    };
 
    const response = await axios.post("https://api.scrapeless.com/api/v2/unlocker/request", payload, {
        headers: {
            "x-api-token": "API Key",
            "Content-Type": "application/json"
        },
        timeout: 60000
    });
 
    if (response.data?.code === 200) {
        fs.writeFileSync('response.md', response.data.data, 'utf8');
    }
})();

Retorna o conteúdo de texto em formato Markdown.

{
    "code": 200,
    "data": "# Example Domain\n\nThis domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.\n\n[More information...](https://www.iana.org/domains/example)"
}

Exemplo do conteúdo após salvar um arquivo Markdown:

# Example Domain
 
This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.
 
[More information...](https://www.iana.org/domains/example)
 

PNG/JPEG

Você pode capturar uma captura de tela da página de destino e retornar uma imagem no formato PNG ou JPEG. Quando o resultado da resposta é definido como PNG ou JPEG, você pode usar o parâmetro input.jsRender.response.options.fullPage=true para especificar se o resultado retornado é uma captura de tela da página inteira.

Adicionando input.jsRender.response.type=png or jpeg à requisição:

const axios = require('axios');
const fs = require('fs');
 
(async () => {
    const payload = {
        actor: "unlocker.webunlocker",
        proxy: {
            country: "ANY"
        },
        input: {
            url: "https://www.example.com",
            jsRender: {
                enabled: true,
                response: {
                    type: "png" // png or jpeg
                }
            }
        }
    };
 
    const response = await axios.post("https://api.scrapeless.com/api/v2/unlocker/request", payload, {
        headers: {
            "x-api-token": "API Key",
            "Content-Type": "application/json"
        },
        timeout: 60000
    });
 
    if (response.data?.code === 200) {
        fs.writeFileSync('response.png', Buffer.from(response.data.data, 'base64'));
    }
})();

Retorna uma string codificada em base64 no formato PNG ou JPEG.

{
    "code": 200,
    "data": "JVBERi0xLjQKJdPr6eEKM..."
}

Exemplo do arquivo após salvar em png/jpeg:

Network

Quando input.jsRender.response.type=network, todas as requisições de rede dos tipos XHR e fetch são capturadas durante o carregamento da página. Os dados das requisições de rede são então retornados em formato de string JSON escapada. Esses dados de resposta incluem a URL, o método da requisição, o código de status da resposta, os cabeçalhos, o corpo da resposta etc.

Se o corpo da requisição ou da resposta contiver conteúdo binário, um corpo de resposta excessivamente grande ou dados não textuais, o conteúdo original não será retornado diretamente. Em vez disso, ele é marcado com a string de espaço reservado [Preview not available ...] . Você pode filtrar os resultados por URL, método da requisição e condições de código de status usando o parâmetro input.jsRender.response.options.

const axios = require('axios');
const fs = require('fs');
 
(async () => {
    const payload = {
        actor: "unlocker.webunlocker",
        proxy: {
            country: "ANY"
        },
        input: {
            url: "https://www.example.com",
            jsRender: {
                enabled: true,
                response: {
                    type: "network",
                    options: {
                        "urls": [
                            "/example"
                        ],
                        "status": [
                            200
                        ],
                        "methods": [
                            "get"
                        ]
                    }
                }
            }
        }
    };
 
    const response = await axios.post("https://api.scrapeless.com/api/v2/unlocker/request", payload, {
        headers: {
            "x-api-token": "API Key",
            "Content-Type": "application/json"
        },
        timeout: 60000
    });
 
    if (response.data?.code === 200) {
        fs.writeFileSync('response.json', response.data.data, 'utf8');
    }
})();

Retorna os dados com string JSON escapada:

{
    "code": 200,
    "data": "[{\"url\":\"https://www.tiktok.com/api/explore/item_list/...]"
}

O exemplo de resultado JSON será parecido com este:

[
  {
    "url": "https://www.tiktok.com/api/explore/item_list/?WebIdLastTime=1752724401&aid=1988&app_language=en&app_name=tiktok_web&browser_language=en&browser_name=Mozilla&browser_online=true&browser_platform=Win32&browser_version=5.0%20%28Windows%20NT%2010.0%3B%20Win64%3B%20x64%29%20AppleWebKit%2F537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome%2F135.0.0.0%20Safari%2F537.36&categoryType=120&channel=tiktok_web&clientABVersions=70508271%2C73485602%2C73547759%2C73720540%2C73810951%2C73814854%2C73848867%2C73866686%2C73944035%2C73969557%2C73990102%2C74048200%2C74129613%2C74148345%2C74157215%2C74163128%2C74176097%2C74195789%2C74213192%2C74241848%2C70405643%2C71057832%2C71200802%2C72361743%2C73171280%2C73208420&cookie_enabled=true&count=8&data_collection_enabled=false&device_id=7527893946556515853&device_platform=web_pc&enable_cache=true&focus_state=true&history_len=2&is_fullscreen=false&is_page_visible=true&language=en&odinId=7527893969448764429&os=windows&priority_region=&referer=&region=US&screen_height=1440&screen_width=3440&tz_name=America%2FNew_York&user_is_login=false&webcast_language=en",
    "method": "GET",
    "resourceType": "fetch",
    "status": 200,
    "timestamp": 1752724403206,
    "payload": null,
    "requestReaders": {
      "sec-ch-ua-platform": "\"Windows\"",
      "referer": "https://www.tiktok.com/explore",
      "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
      "sec-ch-ua": "\"Google Chrome\";v=\"135\", \"Not-A.Brand\";v=\"8\", \"Chromium\";v=\"135\"",
      "sec-ch-ua-mobile": "?0",
      "accept": "*/*",
      "cookie": "tt_csrf_token=KO5LUsj8-r2G0Lcbmx_RqngSiFd_VRcPiaeY; ttwid=1%7CQapzXhCnEqiLXypjvNK3iX65g9iXPk_Jpj4GGLdqNRY%7C1752724401%7Cfb5daf3940529652ba613376c011e990b0afede828ad52c4e0c14f1c422bea61; tt_chain_token=jIGTF0ppLEuXKFGayjhpyg=="
    },
    "responseHeaders": {
      "access-control-expose-headers": "x-tt-traceflag,x-tt-logid",
      "bd-tt-error-code": "0",
      "cache-control": "max-age=1800, must-revalidate",
      "content-encoding": "br",
      "content-length": "30900",
      "content-type": "application/json; charset=utf-8",
      "date": "Thu, 17 Jul 2025 03:53:23 GMT",
      "expires": "Thu, 17 Jul 2025 03:53:23 GMT",
      "pragma": "no-cache",
      "server": "nginx",
      "server-timing": "cdn-cache; desc=HIT, edge; dur=0, origin; dur=0\ninner; dur=387",
      "tt_stable": "1",
      "x-akamai-request-id": "42a8e99d",
      "x-cache": "TCP_MEM_HIT from a23-47-221-69.deploy.akamaitechnologies.com (AkamaiGHost/22.2.0-c471f2b4819e3aa253dfcc21bfdfd452) (-)",
      "x-ms-token": "YAOuylbpReZ5gTM1PP8mwsmWMCxWprQ4oHRNuZQgKsADY7HTftSBu6W9raVm6PKyp-1mXt9Q6CIs0BHLRxozI_uNNEOWSvkaxFyunXX-54aBUvkuHBe2id6bY0cB",
      "x-tt-logid": "20250717035100C13E2314287BF101E7D9",
      "x-tt-trace-host": "0102b37aa413a15dcf9191a3f676ab4b78d5ba03a6d109c921ad21a607e80d7a40dbc340eb8c009458e52488a06a1b874047a91b63eb21ce08d01175dca60742a8bdf12f766710e93ed82ca68be07bf95a053639c5cedca212d37246317d611b65",
      "x-tt-trace-id": "00-250717035100C13E2314287BF101E7D9-729F56051B790290-00",
      "x-tt-trace-tag": "id=16;cdn-cache=hit;type=static"
    },
    "responseBody": {
      "data": "omitted"
    },
    "responseSize": 249297,
    "error": null
  }
]

Content

Quando input.jsRender.response.type=content, ele filtrará dados em formato JSON do conteúdo da página; a resposta será fixada em formato de string JSON. O parâmetro input.jsRender.response.options.outputs permite definir com precisão quais tipos de dados extrair do conteúdo da página extraída, permitindo a recuperação eficiente apenas das informações necessárias. Ao fazer isso, você pode reduzir o tempo de processamento e focar nos dados mais relevantes para o seu caso de uso.

Todos os outputs serão retornados se input.jsRender.response.options.outputs estiver vazio; os outputs opcionais incluem:

phone_numbers, headings, images, audios, videos, links, menus, hashtags, emails, metadata, tables, favicon.

Para uso detalhado, verifique o código abaixo.

const axios = require('axios');
const fs = require('fs');
 
(async () => {
    // Configuration
    const url = "https://api.scrapeless.com/api/v2/unlocker/request";
    const token = "API Key";
 
    const headers = {"x-api-token": token, "Content-Type": "application/json"};
 
    const payload = {
        actor: "unlocker.webunlocker",
        proxy: {
            country: "ANY"
        },
        input: {
            url: "https://www.example.com",
            jsRender: {
                enabled: true,
                response: {
                    type: "content",
                    options: {
                        outputs: [
                            "phone_numbers",
                            "headings",
                            "images",
                            "audios",
                            "videos",
                            "links",
                            "menus",
                            "hashtags",
                            "emails",
                            "metadata",
                            "tables",
                            "favicon"
                        ]
                    }
                }
            }
        }
    };
 
    try {
        const response = await axios.post(url, payload, {headers, timeout: 60000});
 
        if (response.status !== 200) {
            throw newError(`HTTP Error: ${response.status}`);
        }
 
        const data = response.data;
        if (data.code !== 200) {
            throw newError(`API Error: ${data}`);
        }
 
        const content = data.data || '';
 
        // Save and return result
        fs.writeFileSync('response.json', content, 'utf8');
        console.log('✅ Success! Content saved as response.json');
 
        returnJSON.parse(content);
 
    } catch (error) {
        console.error('❌ Error:', error.message);
        throw error;
    }
})()

Aqui estão alguns exemplos:

Emails

Use seletores CSS e expressões regulares para extrair endereços de e-mail em formato padrão, como example@example.com.

{
    "code": 200,
    "data": "{\"emails\":[\"market@scrapeless.com\"]}"
}
 
Phone Numbers

Use seletores CSS e expressões regulares para extrair números de telefone, com foco em links que contenham o protocolo tel:.

exemplo:outputs=phone_numbers

{
    "code": 200,
    "data": "{ \"phone_numbers\": [ \"+1-111-111-111\" ] }"
}
 
Headings

Extraia os textos de títulos de H1 a H6 no HTML.

exemplo:outputs=headings

{
    "code": 200,
    "data": "{\"headings\":[\"Example Domain\"]}"
}
 
Images

Extraia as fontes de imagem das tags img. Retorna apenas o atributo src.

exemplo:outputs=images

{
    "code": 200,
    "data": "{\"images\":[\"https://www.scrapeless.com/_next/image?url=%2Fassets%2Fimages%2Ftoolkit%2Flight%2Fimg-2.png&w=750&q=100\"]}"
}
 
Audios

Extraia as fontes de áudio dos elementos source dentro de tags audio. Retorna apenas o atributo src.

exemplo:outputs=audios

{
    "code": 200,
    "data": "{\"audios\":[\"https://example.com/audio.mp3\"]}"
}
 
Videos

Extraia as fontes de vídeo dos elementos source dentro de tags video. Retorna apenas o atributo src.

exemplo:outputs=videos

{
    "code": 200,
    "data": "{\"videos\":[\"https://example.com/video.mp4\"]}"
}
 

Extraia as URLs das tags a. Retorna apenas o atributo href.

exemplo:outputs=links

{
    "code": 200,
    "data": "{\"links\":[\"https://app.scrapeless.com/landing/guide\",\"https://www.scrapeless.com/en\",\"https://www.scrapeless.com/en/pricing\",\"https://docs.scrapeless.com/\",\"https://backend.scrapeless.com/app/api\",\"https://www.producthunt.com/posts/scrapeless-deep-serpapi\",\"https://www.g2.com/products/scrapeless/reviews\",\"https://www.trustpilot.com/review/scrapeless.com\",\"https://slashdot.org/software/p/Scrapeless/\",\"https://tekpon.com/software/scrapeless/reviews/\",\"https://www.scrapeless.com/en/product/deep-serp-api\",\"https://www.scrapeless.com/en/product/scraping-browser\",\"https://www.scrapeless.com/en/product/scraping-api\",\"https://www.scrapeless.com/en/product/universal-scraping-api\",\"https://www.scrapeless.com/en/solutions/e-commerce\",\"https://www.scrapeless.com/en/solutions/seo\",\"https://www.scrapeless.com/en/solutions/real-estate\",\"https://www.scrapeless.com/en/solutions/travel-hotel-airline\",\"https://www.scrapeless.com/en/solutions/social-media\",\"https://www.scrapeless.com/en/solutions/market-research\",\"https://www.scrapeless.com/en/blog\",\"https://www.scrapeless.com/en/blog/deep-serp-api-online\",\"https://www.scrapeless.com/en/blog/scrapeless-web-scraping-toolkit\",\"https://www.scrapeless.com/en/blog/google-shopping-scrape\",\"https://backend.scrapeless.com/app/api/v1/public/links/github\",\"https://backend.scrapeless.com/app/api/v1/public/links/youtube\",\"mailto:market@scrapeless.com\",\"https://www.scrapeless.com/en/ai-agent\",\"https://browserless.scrapeless.com/\",\"https://www.scrapeless.com/en/solutions/temu\",\"https://www.scrapeless.com/en/solutions/walmart\",\"https://www.scrapeless.com/en/solutions/shopee\",\"https://www.scrapeless.com/en/solutions/lazada\",\"https://www.scrapeless.com/en/solutions/amazon\",\"https://www.scrapeless.com/en/solutions/google-trends\",\"https://www.scrapeless.com/en/solutions/google-search\",\"https://www.scrapeless.com/en/solutions/airbnb\",\"https://www.scrapeless.com/en/solutions/scoot\",\"https://www.scrapeless.com/en/solutions/latam\",\"https://www.scrapeless.com/en/solutions/localiza\",\"https://www.scrapeless.com/en/solutions/tiktok\",\"https://www.scrapeless.com/en/solutions/instagram\",\"https://www.scrapeless.com/en/integration\",\"https://www.scrapeless.com/en/faq\",\"https://www.scrapeless.com/en/glossary\",\"https://www.scrapeless.com/en/legal/privacy-policy\",\"https://www.scrapeless.com/en/legal/terms\",\"https://www.scrapeless.com/en/legal/terms#refund-policy\",\"https://www.scrapeless.com/en/legal/check-your-data\",\"https://backend.scrapeless.com/app/api/v1/public/links/discord\"]}"
}
 

Extraia os itens de menu dos elementos li dentro de tags de menu.

exemplo:outputs=menus

{
    "code": 200,
    "data": "{\"links\":[ \"Coffee\", \"Tea\", \"Milk\" ]}"
}
 
Hashtags

Extraia formatos de hashtag usando expressões regulares para corresponder a padrões típicos de hashtag, como #example.

exemplo:outputs = hashtags

{
    "code": 200,
    "data": "{\"hashtags\":[\"#docsearch\",\"#search\"]}"
}
 
Metadata

Extraia as informações de meta das tags meta na seção head, retornando os atributos name e content no formato name: content.

exemplo:outputs=metadata

{
    "code": 200,
    "data": "{\"metadata\":[\"viewport: width=device-width, initial-scale=1\",\"description: Scrapeless is the best full-stack web scraping toolkit offering Scraping API, Agent Browser\"]}"
}
 
Tables

Extraia os dados dos elementos de tabela e retorne os dados da tabela em formato JSON, incluindo dimensões, títulos e conteúdo.

exemplo:outputs=tables

{
    "code": 200,
    "data": "{\"tables\":[{\"dimensions\":{\"rows\":7,\"columns\":3,\"heading\":true},\"heading\":[\"Company\",\"Contact\",\"Country\"],\"content\":[{\"Company\":\"Alfreds Futterkiste\",\"Contact\":\"Maria Anders\",\"Country\":\"Germany\"},{\"Company\":\"Centro comercial Moctezuma\",\"Contact\":\"Francisco Chang\",\"Country\":\"Mexico\"},{\"Company\":\"Ernst Handel\",\"Contact\":\"Roland Mendel\",\"Country\":\"Austria\"},{\"Company\":\"Island Trading\",\"Contact\":\"Helen Bennett\",\"Country\":\"UK\"},{\"Company\":\"Laughing Bacchus Winecellars\",\"Contact\":\"Yoshi Tannamuri\",\"Country\":\"Canada\"},{\"Company\":\"Magazzini Alimentari Riuniti\",\"Contact\":\"Giovanni Rovelli\",\"Country\":\"Italy\"}]},{\"dimensions\":{\"rows\":11,\"columns\":2,\"heading\":true},\"heading\":[\"Tag\",\"Description\"],\"content\":[{\"Tag\":\"<table>\",\"Description\":\"Defines a table\"},{\"Tag\":\"<th>\",\"Description\":\"Defines a header cell in a table\"},{\"Tag\":\"<tr>\",\"Description\":\"Defines a row in a table\"},{\"Tag\":\"<td>\",\"Description\":\"Defines a cell in a table\"},{\"Tag\":\"<caption>\",\"Description\":\"Defines a table caption\"},{\"Tag\":\"<colgroup>\",\"Description\":\"Specifies a group of one or more columns in a table for formatting\"},{\"Tag\":\"<col>\",\"Description\":\"Specifies column properties for each column within a <colgroup> element\"},{\"Tag\":\"<thead>\",\"Description\":\"Groups the header content in a table\"},{\"Tag\":\"<tbody>\",\"Description\":\"Groups the body content in a table\"},{\"Tag\":\"<tfoot>\",\"Description\":\"Groups the footer content in a table\"}]}]}"
}
 
Favicon

Extraia a URL do favicon do elemento link na seção head do HTML.

exemplo:outputs=favicon

{
    "code": 200,
    "data": "{\"favicon\":\"https://www.scrapeless.com/favicon.ico\"}"
}
 

Controle de Recursos

Sistema de controle de carregamento de recursos para otimizar o desempenho e o uso de banda.

{
  "actor": "unlocker.webunlocker",
  "proxy": {
    "country": "ANY",
    "url": ""
  },
  "input": {
    "url": "string",
    "jsRender": {
      "enabled": true,
      "block": {
        "resources": [
          "Image",
          "Font",
          "Stylesheet",
          "Script"
        ],
        "urls": [
          // Optional, URL pattern-based blocking
          "*.analytics.com/*",
          "*/ads/*"
        ]
      }
    }
  }
}

Referência Completa dos Tipos de Recursos:

Tipo de RecursoDescriçãoImpacto
DocumentDocumento principal e iframesConteúdo principal da página
StylesheetArquivos CSSEstilização e layout da página
ImageImagens e íconesConteúdo visual
MediaRecursos de áudio e vídeoConteúdo multimídia
FontFontes webRenderização de texto
ScriptArquivos JavaScriptFuncionalidade da página
TextTrackLegendas e closed captions de vídeoAcessibilidade de mídia
XHRChamadas XMLHttpRequestRequisições assíncronas legadas
FetchRequisições da API FetchRequisições assíncronas modernas
PrefetchRecursos pré-carregadosOtimização de desempenho
EventSourceEventos enviados pelo servidorAtualizações em tempo real
WebSocketConexões WebSocketComunicação bidirecional
ManifestManifestos de aplicativos webConfiguração de PWA
SignedExchangeTrocas HTTP assinadasAutenticidade do conteúdo
PingRequisições de pingAnálise e rastreamento
CSPViolationReportRelatórios de violação de CSPMonitoramento de segurança
PreflightRequisições preflight de CORSSegurança cross-origin
OtherRecursos não classificadosDiversos

Exemplo de Uso:

{
  "actor": "unlocker.webunlocker",
  "proxy": {
    "country": "ANY",
    "url": ""
  },
  "input": {
    "url": "string",
    "jsRender": {
      "enabled": true,
      "block": {
        "resources": [
          "Image",
          "Font",
          "Stylesheet",
          "Script",
          "Media",
          "Ping",
          "Prefetch"
        ]
      }
    }
  }
}

Melhores Práticas para o Bloqueio de Recursos:

  1. Otimização de Desempenho

    • Use o bloqueio de recursos com sabedoria; bloqueie recursos não essenciais para um carregamento mais rápido
    • Considere bloquear Prefetch e Ping para reduzir o uso de rede
    • Mantenha os recursos Document e Script críticos desbloqueados
  2. Gerenciamento de Banda

    • Bloqueie Image e Media em páginas que consomem muita banda
    • Considere bloquear Font para usar fontes do sistema em vez disso
  3. Aprimoramento de Estabilidade

    • Implemente mecanismos de repetição de requisições
    • Adicione lógica de tratamento de erros
    • Use waitFor em vez de wait fixo
  4. Eficiência de Recursos

    • Carregue recursos sob demanda
    • Feche conexões desnecessárias prontamente

Observação: As strings de tipo de recurso diferenciam maiúsculas de minúsculas. Use correspondências exatas conforme mostrado na tabela de referência.