Uma plataforma de baixo código que combina a simplicidade sem código com o poder do código completo 🚀
Comece gratuitamente
Dominando a navegação de página com o Puppeteer: uso eficaz de goto e opções de navegação
14 de março de 2025
.
8
min ler

Dominando a navegação de página com o Puppeteer: uso eficaz de goto e opções de navegação

Jorge Miloradovitch
Pesquisador, redator e entrevistador de casos de uso
Índice

O Puppeteer simplifica a automação da web oferecendo ferramentas para controlar os navegadores Chrome e Chromium. A page.goto() o método é essencial para navegar nas páginas de forma eficaz, seja para testar, raspar ou automatizar tarefas. Aqui está o que você encontrará:

  • Experimente o Headless Browser Template no Latenode para automatizar a navegação, captura de tela e análise de sites!
  • Características principais de page.goto(): Navegue até URLs com opções como timeout, waitUntil e referer.
  • Estratégias de Espera: Use condições como domcontentloaded, load, networkidle0ou networkidle2 para páginas dinâmicas ou estáticas.
  • Tratamento de erros: Detecte falhas de navegação e gerencie tempos limite com try-catch blocos.
  • Técnicas Avançadas: Gerencie SPAs, lide com fluxos de trabalho de várias etapas e otimize o desempenho com cache e controle de recursos.

Visão geral rápida das opções de espera

Opção de espera melhor para Cronometragem (Aprox.)
domcontentloaded Verificações de estrutura estática segundo 1-2
load Páginas estáticas totalmente carregadas segundo 2-5
networkidle2 Balanceado para conteúdo dinâmico segundo 3-8
networkidle0 Páginas complexas e dinâmicas segundo 5-10

Principais conclusões: Combine suas condições de espera e tratamento de erros com o tipo de página para automação confiável. Mergulhe em métodos avançados para SPAs e processos multietapas para lidar com fluxos de trabalho complexos de forma eficiente.

sbb-itb-23997f1

Como navegar em URLs específicas usando o Puppeteer no Latenode?

Latenode usa o navegador Headless movido a Puppeteer, instalado em seu cenário automaticamente, instalado análise profissional de sites e manutenção sequência. Você pode facilmente se integrar à biblioteca usando um novo código e usá-lo com um medicamento serviços - em nossa entrega maior que 300 integração com o programa.

Experimente o modelo AGORA: Capture, analise e compartilhe insights do site com o Headless Browser e o ChatGPT

Diferentemente dos scrapers comuns, ele captura a estrutura visual real, reconhecendo elementos de design e blocos de texto. Experimente o Headless Browser neste modelo agora! Esse fluxo de trabalho não apenas captura e analisa dados do site, mas também garante que você possa compartilhar insights facilmente para uma comunicação perfeita.

  • Defina a URL: Insira a URL do site que você deseja analisar para obter insights visuais.
  • Capture a captura de tela: Um navegador sem interface navega até o site e captura uma imagem da tela.
  • Analisar com ChatGPT: A captura de tela é analisada pelo ChatGPT para extrair e resumir os principais insights.
  • Compartilhe ideias:Depois disso, integre-se ao seu messenger para enviar uma mensagem contendo a análise, entregando detalhes claros diretamente na sua caixa de entrada.

Como usar page.goto() no Puppeteer?

A page.goto() O método no Puppeteer é usado para navegar para URLs específicas.

Parâmetros do método

A page.goto() O método aceita vários parâmetros para personalizar a navegação:

await page.goto(url, {
  timeout: 30000,
  waitUntil: 'networkidle0',
  referer: 'https://example.com'
});

Aqui está uma análise dos principais parâmetros:

  • url: A URL para navegar. Isso é obrigatório e pode ser um caminho absoluto ou relativo.
  • tempo limite: Define o tempo máximo (em milissegundos) para esperar a página carregar. O padrão é 30,000 ms.
  • espere até: Define quando a navegação é considerada concluída.
  • referenciador: Define um cabeçalho de referência personalizado para a solicitação.
Opção de espera Descrição melhor para
load Aciona quando o load evento é disparado. Páginas estáticas que são fáceis de carregar.
domcontentloaded Dispara quando o HTML inicial é totalmente carregado. Verificações rápidas da estrutura da página.
networkidle0 Aguarda até que não haja atividade de rede por 500 ms. Páginas com conteúdo dinâmico ou complexo.
networkidle2 Aguarda até que restem apenas 2 conexões de rede. Equilibra velocidade e meticulosidade.

Essas opções permitem que você controle como e quando a página é considerada totalmente carregada, garantindo uma navegação precisa e confiável.

Tratamento de respostas

Uma vez que os parâmetros de navegação são definidos, o próximo passo é lidar com a resposta. O page.goto() método retorna uma Promise que resolve para um objeto Response. Este objeto fornece detalhes sobre a navegação:

const response = await page.goto(url);
if (response) {
  const status = response.status();
  const headers = response.headers();
  const ok = response.ok(); // true for status codes 200-299
}

Veja como você pode verificar a navegação:

  • Verifique os códigos de status: Usar response.status() para confirmar o status HTTP.
  • Lidar com erros: Use blocos try-catch para capturar navegações com falha.
  • Analisar Cabeçalhos: Acesse os cabeçalhos de resposta usando response.headers().

Para tratamento de erros, envolva o page.goto() chamar em um bloco try-catch:

try {
  const response = await page.goto(url, { waitUntil: 'networkidle0' });
  if (!response.ok()) {
    throw new Error(`Page load failed with status: ${response.status()}`);
  }
} catch (error) {
  console.error('Navigation failed:', error);
}

O objeto de resposta inclui vários métodos úteis:

  • response.status(): Recupera o código de status HTTP.
  • response.headers(): Obtém os cabeçalhos de resposta.
  • response.securityDetails(): Fornece detalhes de SSL/TLS.
  • response.timing(): Oferece dados de tempo de navegação.

Essas ferramentas garantem que você possa validar a navegação e lidar com quaisquer problemas de forma eficaz.

Opções de carregamento de página

Ao trabalhar com os recursos de navegação do Puppeteer, escolher a estratégia de espera correta é essencial para criar uma automação confiável. Seus scripts devem prosseguir somente quando a página estiver totalmente pronta.

Condições de espera

O marionetista usa o waitUntil parâmetro para definir quando uma página é considerada carregada. Aqui está um exemplo:

const navigationOptions = { waitUntil: ['load', 'networkidle0'], timeout: 30000 };
await page.goto('https://example.com', navigationOptions);

Se você especificar várias condições de espera, o Puppeteer aguardará que todas elas ocorram antes de prosseguir. Aqui está uma análise das condições de espera comuns e seu tempo típico:

Condição de espera Tempo aproximado
domcontentloaded segundo 1-2
load segundo 2-5
networkidle2 segundo 3-8
networkidle0 segundo 5-10

Escolha suas condições de espera com base na estrutura da sua página e na rapidez com que ela carrega.

Selecionando opções de espera

A condição de espera correta depende se você está lidando com um site estático ou dinâmico:

// For a static site
await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 15000 });

// For a dynamic site
await page.goto(url, { waitUntil: 'networkidle0', timeout: 45000 });

Certifique-se de que o valor do tempo limite corresponda à complexidade da condição de espera escolhida. Condições mais detalhadas, como networkidle0, pode precisar de timeouts mais longos para evitar erros. Para tornar seu script ainda mais confiável, combine condições de espera com verificações adicionais.

Vários estados de espera

Para maior precisão, você pode emparelhar condições de espera com verificações de elementos específicos:

await page.goto(url, { waitUntil: 'load' });
await page.waitForSelector('#main-content');
await page.waitForFunction(() => {
    return document.readyState === 'complete' && !document.querySelector('.loading-spinner');
});

Este método garante que a página seja completamente carregada e que elementos específicos estejam disponíveis. Ao fazer isso, você minimiza falhas de teste e melhora a confiabilidade da sua automação.

Métodos de Navegação Complexos

Esta seção explica técnicas avançadas para gerenciar navegação complexa no Puppeteer. Com base nas estratégias básicas de navegação e espera de antes, esses métodos focam em lidar com cenários mais desafiadores.

Gestão de Erros

Lide com erros de navegação de forma eficaz combinando verificações de tempo limite com etapas de recuperação personalizadas:

const navigationPromise = page.goto(url);
const timeoutPromise = new Promise((_, reject) => 
    setTimeout(() => reject(new Error('Navigation timed out')), 45000)
);

try {
    await Promise.race([navigationPromise, timeoutPromise]);
} catch (error) {
    if (error instanceof TimeoutError) {
        await page.reload({ waitUntil: 'networkidle0' });
    } else {
        console.error(`Navigation failed: ${error.message}`);
        throw error;
    }
}

Essa abordagem garante que os tempos limite sejam gerenciados e que a página possa se recuperar ou recarregar conforme necessário.

Navegação SPA

Navegar em aplicativos de página única (SPAs) requer uma estratégia diferente, geralmente envolvendo mudanças de rota e comportamentos específicos da estrutura:

// Wait for the route to update
await page.waitForFunction(
    'window.location.pathname === "/dashboard"'
);

// React framework example
await page.click('[data-testid="nav-link"]');
await page.waitForFunction(() => {
    return document.querySelector('#react-root').__reactContainer !== null;
});

Este método garante uma navegação suave em SPAs aguardando alterações específicas no estado do aplicativo.

Navegação combinada

Para fluxos de trabalho que envolvem várias etapas, você pode combinar técnicas de navegação para lidar com cenários complexos:

async function complexNavigation(page, targetUrl) {
    // Load the initial page
    await page.goto(targetUrl);

    // Check for authentication completion
    await page.waitForSelector('#auth-complete');

    // Handle dynamic content
    await page.evaluate(() => {
        window.scrollTo(0, document.body.scrollHeight);
    });

    // Verify the page state
    await page.waitForFunction(() => {
        return window.performance.timing.loadEventEnd > 0;
    });
}

Para processos de várias etapas, você também pode usar navegação e ações paralelizadas:

await page.goto(baseUrl);

await Promise.all([
    page.waitForNavigation({ waitUntil: 'networkidle0' }),
    page.click('button[type="submit"]')
]);

Essas técnicas simplificam a navegação em fluxos de trabalho complexos, garantindo o manuseio eficiente de conteúdo dinâmico e processos de várias etapas.

Velocidade e desempenho

Aumentar a velocidade e a eficiência da navegação é essencial para criar fluxos de trabalho de automação eficazes. Abaixo estão algumas técnicas práticas para melhorar o desempenho em vários cenários.

Uso do cache do navegador

Você pode configurar o tamanho do cache do navegador e gerenciar o cache de forma eficiente seguindo estas etapas:

const browser = await puppeteer.launch({
  args: ['--disk-cache-size=104857600'], // 100MB cache
  userDataDir: './cache-directory'
});

const context = await browser.createIncognitoBrowserContext();

await page._client.send('Network.clearBrowserCache');

await page.setCacheEnabled(true);
await page.setRequestInterception(true);
page.on('request', request => {
  if (request.resourceType() === 'document') {
    request.continue({
      headers: {
        ...request.headers(),
        'Cache-Control': 'max-age=3600'
      }
    });
  } else {
    request.continue();
  }
});

Depois que o cache estiver configurado, você pode voltar sua atenção para o gerenciamento do carregamento de recursos para uma navegação ainda mais rápida.

Gestão de Recursos

Para reduzir o carregamento desnecessário de recursos, bloqueie itens não essenciais, como imagens e fontes:

await page.setRequestInterception(true);
page.on('request', request => {
  if (request.resourceType() === 'image' || request.resourceType() === 'font') {
    request.abort();
  } else {
    request.continue();
  }
});

Essa abordagem ajuda a economizar largura de banda e acelera as interações nas páginas.

Navegação com várias abas

Lidar com várias abas de forma eficiente pode melhorar o desempenho aproveitando ao máximo os recursos disponíveis. Veja como você pode gerenciar a navegação em várias abas:

async function navigateMultipleTabs(urls) {
  const pages = await Promise.all(
    urls.map(async url => {
      const page = await browser.newPage();
      await page.setDefaultNavigationTimeout(30000);
      return page;
    })
  );

  await Promise.all(
    pages.map(async (page, index) => {
      try {
        await page.goto(urls[index], {
          waitUntil: 'networkidle0',
          timeout: 30000
        });
      } catch (error) {
        console.error(`Failed to load ${urls[index]}: ${error.message}`);
        await page.close();
      }
    })
  );

  return pages.filter(page => !page.isClosed());
}

Para evitar sobrecarga de recursos, limite o número de abas abertas processando-as em lotes:

const maxConcurrentTabs = 3;
const tabPool = [];

for (let i = 0; i < urls.length; i += maxConcurrentTabs) {
  const batch = urls.slice(i, i + maxConcurrentTabs);
  const currentTabs = await navigateMultipleTabs(batch);
  tabPool.push(...currentTabs);

  await Promise.all(
    tabPool.map(async tab => {
      // Process each tab as needed
      await tab.close();
    })
  );

  tabPool.length = 0;
}

Este método de processamento em lote garante uma operação tranquila sem sobrecarregar os recursos do sistema.

Conclusão

Principais lições

Para aproveitar ao máximo o Puppeteer's page.goto() método, concentre-se nestas estratégias práticas:

  • Usar Latenode: Experimente o Headless Browser no Latenode para visitar URLs, fazer capturas de tela e analisar sites!
  • Estratégias de Espera: Combine o waitUntil opção para o seu tipo de página para maior confiabilidade.
  • Tratamento de erros: Usar try-catch blocos e tempos limite para lidar com erros de navegação de forma eficaz.
  • Gestão de Recursos: Ajuste as configurações de cache do navegador e gerencie o carregamento de recursos para melhorar o desempenho.
  • Aplicativos de página única (SPAs): Par page.goto() com condições de espera personalizadas para lidar adequadamente com mudanças de estado.

Essas abordagens se baseiam nas técnicas discutidas anteriormente, ajudando você a navegar em cenários complexos e melhorar o desempenho. Veja como você pode aplicá-las passo a passo:

Guia de Implementação

1. Configurar navegação básica

const page = await browser.newPage();
await page.setDefaultNavigationTimeout(30000);
await page.goto(url, {
  waitUntil: 'networkidle0',
  timeout: 30000
});

2. Incorporar tratamento de erros

try {
  await page.goto(url, {
    waitUntil: ['load', 'networkidle0'],
    timeout: 30000
  });
} catch (error) {
  if (error instanceof TimeoutError) {
    await page.evaluate(() => window.stop());
    throw error;
  }
}

3. Otimizar o carregamento de recursos

await page.setRequestInterception(true);
await page.setCacheEnabled(true);
page.on('request', request => {
  if (request.resourceType() === 'image') {
    request.abort();
  } else {
    request.continue();
  }
});

Posts Relacionados do Blog

Blogs relacionados

Caso de uso

Apoiado por