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
Prefetch
ePing
para reduzir o uso da rede - Mantenha os recursos
Document
eScript
críticos desbloqueados
-
Gerenciamento de Largura de Banda
- Bloqueie
Image
eMedia
para páginas com uso intensivo de largura de banda - Considere bloquear
Font
para 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
waitFor
em vez dewait
fixo
-
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.