Pular para o conteúdo
Entrar Cadastre-se

Renderização de JavaScript

SPAs e páginas com muito JS precisam de execução real em navegador. A Web Scraping API lida com isso com uma única flag.

Adicione render_js=1 a qualquer requisição. O Shifter inicia uma nova instância headless do Chrome, navega até a URL e retorna o DOM pós-renderização.

Terminal window
curl "https://scrape.shifter.io/v1?api_key=YOUR_API_KEY&url=https://example.com&render_js=1"

A renderização JS é cobrada com o mesmo 1 crédito por requisição bem-sucedida que os fetches estáticos. Sem sobretaxa.

A maioria das SPAs termina de carregar depois que um elemento específico aparece. Use wait_for_css para bloquear até que esse seletor seja renderizado:

Terminal window
curl "https://scrape.shifter.io/v1?api_key=YOUR_API_KEY&url=https://shop.example.com&render_js=1&wait_for_css=.product-price"

A requisição é concluída assim que .product-price está no DOM, ou falha por timeout (padrão de 30s).

Limite o tempo total que o navegador pode gastar em uma página com timeout (em milissegundos):

Terminal window
curl "https://scrape.shifter.io/v1?api_key=YOUR_API_KEY&url=https://slow.example.com&render_js=1&timeout=10000"

Útil para fazer scraping de dashboards de carregamento lento, quando você quer o que estiver visível após 10 segundos em vez de uma renderização completa.

Role a página, clique ou execute etapas arbitrárias antes da captura usando js_instructions (JSON codificado em URL). Padrões comuns:

Rolar para carregar feeds infinitos:

[{"action": "scrollTo", "selector": "footer", "timeout": 5000, "block": "start"}]

Clicar em um botão antes de fazer scraping:

[{"action": "click", "selector": "button.load-more", "timeout": 3000}]

Encadear várias etapas:

[
{"action": "click", "selector": "button.accept-cookies"},
{"action": "scrollTo", "selector": "div.results"},
{"action": "wait", "duration": 2000}
]

Passe o array como uma string codificada em URL em js_instructions.

Tire uma captura de tela da página inteira em vez do DOM adicionando screenshot=1. A resposta é um PNG binário. Veja Avançado.

  • Páginas HTML estáticas (artigos de notícias, posts de blog, conteúdo no estilo RSS)
  • APIs JSON (use um fetch direto, não o endpoint de scraping)
  • Arquivos e binários

Pular render_js é mais barato em latência, embora os créditos sejam os mesmos.