Renderização JS
A Universal Scraping API é um poderoso serviço de recuperação de conteúdo web que suporta cenários complexos de renderização e interação de páginas web.
Consulte nossa documentação da API para obter conteúdo detalhado.
Estrutura da Solicitaçã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 JavaScript
A renderização JavaScript permite o tratamento de conteúdo carregado dinamicamente e SPAs (Single Page Applications). Habilita um ambiente de navegador completo, suportando interações e requisitos de renderização de páginas mais complexos.
input.jsRender.enabled=true, usaremos o navegador para a requisição.
{
"actor": "unlocker.webunlocker",
"proxy": {
"country": "ANY"
},
"input": {
"url": "https://example.com/",
"jsRender": {
"enabled": true
}
}
}Instruções JavaScript
Fornece um amplo conjunto 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 aparecimento de elementos específicos, fornecendo 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
]
// Aguardar elemento
},
{
"click": [
"#load-more",
1000
]
// Clicar em elemento
},
{
"fill": [
"#search-input",
"search term"
]
// Preencher formulário
},
{
"keyboard": [
"press",
"Enter"
]
// Simular pressionamento de tecla
},
{
"evaluate": "window.scrollTo(0, document.body.scrollHeight)"
// Executar JS personalizado
}
]
}
}
}Aqui estão algumas ações comuns que você pode executar com Instruções JavaScript:
Referência de Instruções JavaScript
| Instrução | Sintaxe | Descrição | Exemplo |
|---|---|---|---|
waitFor | [selector, timeout] | Aguardar elemento aparecer | {"waitFor": [".content", 30000]} |
click | [selector, delay] | Clicar em elemento | {"click": [".button", 1000]} |
fill | [selector, value] | Preencher formulário | {"fill": ["#input", "text"]} |
wait | milliseconds | Tempo de espera fixo | {"wait": 2000} |
evaluate | javascript code | Executar código JS | {"evaluate": "console.log('test')"} |
keyboard | [action, value, delay?] | Operação de teclado | Ver tabela de operações de teclado abaixo |
Operações de Teclado
| Operação | Sintaxe | Descrição | Exemplo |
|---|---|---|---|
| Pressionar tecla | ["press", keyInput] | Pressionar uma tecla específica keyInput | {"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 pelo parâmetro input.jsRender.response.type, os valores opcionais são:
html | plaintext | markdown | png | jpeg | network | content, com o valor padrão sendo html:
| type | descrição |
|---|---|
| html | string HTML cru escapada da página, suporta seletor CSS |
| plaintext | string de texto simples da página, suporta seletor CSS |
| markdown | string Markdown escapada da página, suporta seletor CSS |
| png | string codificada em base64 da página com formato png, suporta seletor CSS |
| jpeg | string codificada em base64 da página com formato jpeg, suporta seletor CSS |
| network | habilita a captura de requisições de rede, irá coletar todas as requisições XHR e fetch feitas durante o carregamento da página e retornar seus detalhes com formato de string JSON escapada, não suporta seletor CSS |
| content | filtra dados do conteúdo da página, retorna os resultados em um 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 à solicitaçã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>"
}O conteúdo de exemplo do arquivo HTML após o salvamento:
<!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>Texto Simples
O recurso de texto simples é uma opção de saída que retorna o conteúdo raspado em formato de texto simples em vez de HTML ou Markdown. Esse recurso é altamente prático quando uma versão limpa e não formatada do conteúdo (sem tags HTML ou formatação Markdown) é necessária. Ele simplifica o processo de extração de conteúdo, tornando o processamento ou análise de texto mais convenientes.
Adicione input.jsRender.response.type=plaintext à solicitaçã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..."
}O conteúdo de exemplo do arquivo txt após o salvamento:
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 Universal Scraping API retornará o conteúdo em formato Markdown, tornando-o mais legível e fácil de processar.
Adicione input.jsRender.response.type=markdown à solicitaçã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)"
}O conteúdo de exemplo 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 em formato PNG
ou JPEG. Quando o resultado da resposta estiver 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 de página inteira.
Adicionando input.jsRender.response.type=png ou jpeg à solicitaçã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 ou 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 em formato PNG ou JPEG.
{
"code": 200,
"data": "JVBERi0xLjQKJdPr6eEKM..."
}O arquivo de exemplo após salvar em png/jpeg:

Rede
Quando input.jsRender.response.type=network, todas as solicitações de rede dos tipos XHR e fetch são capturadas durante
o carregamento da página. Os
dados da solicitação de rede são então retornados como uma string JSON escapada formatada. Esses dados de resposta incluem a URL, o método da solicitação, o código de status da resposta, cabeçalhos, corpo da resposta etc.
Se o corpo da solicitação ou resposta contiver conteúdo binário, um corpo de resposta muito grande ou dados não textuais, o conteúdo original
não será retornado diretamente. Em vez disso, é marcado com a string de espaço reservado [Preview not available ...]
. Você pode filtrar os resultados por URL, método de solicitaçã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 dados com string JSON escapada:
{
"code": 200,
"data": "[{\"url\":\"https://www.tiktok.com/api/explore/item_list/...]"
}O resultado JSON de exemplo será assim:
[
{
"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=®ion=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": "0102b37aa413a15dcf9191a3f676ab4b78d5ba03a6d109c921ad21a607e80d7a40dbc340eb8c009458e52488a06a1b874047a91b63eb21ce08d01175dca60742a8bdf12f766710e93ed82ca68be07bf95a053639c5cedca68be07bf95a053639c5cedca212d37246317d611b65",
"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
}
]Conteúdo
Quando input.jsRender.response.type=content, ele filtrará dados formatados em JSON do conteúdo da página, a resposta será
fixada no formato string JSON. O parâmetro input.jsRender.response.options.outputs permite definir precisamente quais tipos de dados
extrair do conteúdo da página raspada, permitindo
a recuperação eficiente apenas das informações necessárias. Ao fazer isso, você pode reduzir o tempo de processamento e se concentrar nos
dados mais relevantes para o seu caso de uso.
Todas as saídas serão retornadas se input.jsRender.response.options.outputs estiver vazio, as saídas 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 () => {
// Configuração
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 || '';
// Salvar e retornar resultado
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 email em formato padrão, como example@example.com.
{
"code": 200,
"data": "{\"emails\":[\"market@scrapeless.com\"]}"
}
Números de Telefone
Use seletores CSS e expressões regulares para extrair números de telefone, com foco em links contendo o protocolo tel:.
example:outputs=phone_numbers
{
"code": 200,
"data": "{ \"phone_numbers\": [ \"+1-111-111-111\" ] }"
}
Títulos
Extraia textos de títulos de H1 a H6 em HTML.
example:outputs=headings
{
"code": 200,
"data": "{\"headings\":[\"Example Domain\"]}"
}
Imagens
Extraia as fontes das imagens das tags img. Retorna apenas o atributo src.
example:outputs=images
{
"code": 200,
"data": "{\"images\":[\"https://www.scrapeless.com/_next/image?url=%2Fassets%2Fimages%2Ftoolkit%2Flight%2Fimg-2.png&w=750&q=100\"]}"
}
Áudios
Extraia as fontes de áudio dos elementos source dentro das tags audio. Retorna apenas o atributo src.
example:outputs=audios
{
"code": 200,
"data": "{\"audios\":[\"https://example.com/audio.mp3\"]}"
}
Vídeos
Extraia as fontes de vídeo dos elementos source dentro das tags video. Retorna apenas o atributo src.
example:outputs=videos
{
"code": 200,
"data": "{\"videos\":[\"https://example.com/video.mp4\"]}"
}
Links
Extraia URLs das tags a. Retorna apenas o atributo href.
example: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\"]}"
}
Menus
Extraia itens de menu de elementos li dentro de tags de menu.
example: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.
example:outputs = hashtags
{
"code": 200,
"data": "{\"hashtags\":[\"#docsearch\",\"#search\"]}"
}
Metadados
Extraia informações meta de tags meta na seção head, retornando os atributos name e content no
formato name: content.
example: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, Scraping Browser\"]}"
}
Tabelas
Extraia dados de elementos de tabela e retorne os dados da tabela em formato JSON, incluindo dimensões, cabeçalhos e conteúdo.
example: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.
example: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 largura de banda.
{
"actor": "unlocker.webunlocker",
"proxy": {
"country": "ANY",
"url": ""
},
"input": {
"url": "string",
"jsRender": {
"enabled": true,
"block": {
"resources": [
"Image",
"Font",
"Stylesheet",
"Script"
],
"urls": [
// Opcional, bloqueio baseado em padrão de URL
"*.analytics.com/*",
"*/ads/*"
]
}
}
}
}Referência Completa de Tipos de Recursos:
| Tipo de Recurso | Descrição | Impacto |
|---|---|---|
Document | Documento principal e iframes | Conteúdo principal da página |
Stylesheet | Arquivos CSS | Estilo e layout da página |
Image | Imagens e ícones | Conteúdo visual |
Media | Recursos de áudio e vídeo | Conteúdo multimídia |
Font | Fontes da web | Renderização de texto |
Script | Arquivos JavaScript | Funcionalidade da página |
TextTrack | Legendas e legendas de vídeo | Acessibilidade de mídia |
XHR | Chamadas XMLHttpRequest | Requisições assíncronas legadas |
Fetch | Requisições da API Fetch | Requisições assíncronas modernas |
Prefetch | Recursos pré-buscados | Otimização de desempenho |
EventSource | Eventos enviados pelo servidor | Atualizações em tempo real |
WebSocket | Conexões WebSocket | Comunicação bidirecional |
Manifest | Manifestos de aplicativos web | Configuração de PWA |
SignedExchange | Trocas HTTP assinadas | Autenticidade de conteúdo |
Ping | Requisições Ping | Análise e rastreamento |
CSPViolationReport | Relatórios de violação de CSP | Monitoramento de segurança |
Preflight | Requisições de pré-voo CORS | Segurança entre origens |
Other | Recursos não classificados | Diversos |
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 Bloqueio de Recursos:
-
Otimização de Desempenho
- Use o bloqueio de recursos com sabedoria, bloqueie recursos não essenciais para um carregamento mais rápido
- Considere bloquear
PrefetchePingpara reduzir o uso da rede - Mantenha os recursos
DocumenteScriptcríticos desbloqueados
-
Gerenciamento de Largura de Banda
- Bloqueie
ImageeMediapara páginas com uso intensivo de largura de banda - Considere bloquear
Fontpara usar fontes do sistema em vez disso
- Bloqueie
-
Melhoria da Estabilidade
- Implemente mecanismos de repetição de solicitação
- Adicione lógica de tratamento de erros
- Use
waitForem vez dewaitfixo
-
Eficiência de Recursos
- Carregue recursos sob demanda
- Feche conexões desnecessárias prontamente
Observação: As strings do tipo de recurso são sensíveis a maiúsculas e minúsculas. Use correspondências exatas como mostrado na tabela de referência.