Código-fonte vazio?
Devolve o HTML renderizado de uma página JavaScript: um navegador de verdade abre a URL, executa os scripts e entrega o código como ele fica depois de tudo carregar. É a saída para sites feitos em React, Vue e afins, cujo código-fonte original vem quase vazio — o conteúdo só existe depois da renderização.
Rode online
Rode nos nossos servidores com a sua conta. As ferramentas grátis rodam no seu navegador; esta aqui é descontada do seu saldo do KIT pelo preço acima.
Por que o código-fonte vem vazio
Em um site moderno de página única (SPA), o servidor entrega pouco mais que uma casca: uma div raiz e uma pilha de scripts. O conteúdo — produtos, textos, preços — é montado pelo JavaScript já dentro do navegador do visitante. Por isso, quem baixa a página com uma requisição simples recebe um HTML sem nada dentro: o dado que você procura nunca esteve no arquivo original, ele nasce na renderização.
O que a API devolve
A chamada recebe a URL; um navegador real abre a página, executa os scripts, aguarda o carregamento e serializa o documento final — o DOM completo — de volta como HTML. O fluxo é assíncrono: task_id, consulta de status, download do resultado. O limite de renderização é de 30 segundos por página, e o acesso é o de um visitante anônimo, sem sessão nem login.
Para que serve o HTML final
Para tudo que engasga com SPA: raspadores que voltavam de mãos vazias passam a enxergar o conteúdo; auditorias de SEO conferem o que de fato existe na página depois dos scripts; sistemas antigos que só entendem HTML conseguem consumir sites modernos. Também é ótima ferramenta de diagnóstico — comparar o código-fonte cru com o renderizado mostra exatamente o que o JavaScript está construindo.
Preço — e quando você não precisa disto
US$ 0,040 por chamada mais US$ 0,001 por URL. Honestidade que economiza dinheiro: se o site é estático e o conteúdo já aparece no código-fonte comum, uma requisição simples resolve de graça do seu lado — renderização aqui seria desperdício. Reserve esta ferramenta para páginas que realmente dependem de JavaScript; nelas, é a diferença entre receber tudo e não receber nada.
Casos de uso
A raspagem que voltava vazia
Um desenvolvedor em Curitiba raspava a vitrine de um marketplace feito em React e o parser voltava sem um único produto. Trocou a fonte: em vez do HTML cru, passou a processar o renderizado — e o mesmo parser, sem mudar uma linha, encontrou tudo.
Conferir o que o buscador enxerga
A equipe de SEO de uma loja virtual descobriu que a descrição dos produtos só existia após o JavaScript rodar. Comparando o código-fonte com o HTML renderizado, documentou o problema e levou o caso concreto para o time de desenvolvimento.
Sistema legado lendo site moderno
O ERP da Distribuidora Horizonte Verde só sabe interpretar HTML simples. Com a renderização feita fora, o sistema antigo passou a acompanhar páginas de fornecedores construídas com frameworks modernos, sem precisar de reforma interna.
Perguntas frequentes
Qual a diferença para o “ver código-fonte” do navegador?
O código-fonte é o que o servidor mandou antes de qualquer script rodar; o HTML renderizado é o documento depois de o JavaScript montar a página. Em sites modernos, a diferença entre um e outro costuma ser o conteúdo inteiro.
Funciona com React, Vue e Angular?
Funciona com qualquer página pública, seja qual for o framework: o navegador executa o JavaScript como faria para um visitante comum. O que renderiza para o público, renderiza aqui.
Quanto tempo a página tem para renderizar?
Até 30 segundos. Se os scripts não terminarem nesse prazo, a tarefa retorna erro identificado — melhor do que devolver um documento pela metade sem avisar.
O resultado traz o que depende de clique ou de rolagem?
Traz o que está no documento ao fim do carregamento inicial. Conteúdo que só aparece após interação — abrir aba, clicar em “carregar mais”, fazer login — não faz parte desse estado e fica de fora.
Qual é o preço por página?
US$ 0,040 pela chamada mais US$ 0,001 pela URL, pago por uso em dólar. Renderizar cem páginas de um catálogo dinâmico custa cerca de US$ 4,10, sem mensalidade envolvida.
O HTML processado fica com vocês?
O documento é gerado para responder à sua tarefa e entregue a você. Não alimenta base nossa nem vira insumo para terceiros — o interesse termina quando o resultado é entregue.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/web/render \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://ejemplo.com"}'const res = await fetch("https://api.kit.forhosting.com/web/render", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://ejemplo.com"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/render",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://ejemplo.com"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/render", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://ejemplo.com"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://ejemplo.com"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/render", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"url": "https://ejemplo.com"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.render",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
timeout_sec | 30 |
max_crawl_pages | 25 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
422 | task_failed | A tarefa falhou do nosso lado. Você não paga nada por ela. |