Golong realiza captura de tela do navegador do servidor

Recentemente, quando eu estava usando o golang para trabalhos de desenvolvimento, me inspirei no artigo publicado na conta pública técnica do 360. Pensei se seria possível usar o golang para operar um navegador sem cabeça para obter funções como rastreadores, capturas de tela e testes automatizados. Após pesquisas e testes, descobri que a implementação do golang também é uma boa escolha.

Antecedentes

A Conta Pública da Technology 360 publicou uma vez um artigo "Screenshot do Navegador do Servidor" , que explicava em detalhes a tecnologia de captura de tela do lado do servidor baseada no Selenium (Python SDK), que é muito operacional.

O autor utilizou o Python + Selenium para implementar funções simples de teste automatizadas e de rastreador. Envolve as tecnologias e componentes usados ​​no artigo acima. Acho que os iniciantes podem implementar completamente a função de captura de tela do lado do servidor através do treinamento prático deste artigo.

No entanto, a implementação da captura de tela baseada no Selenium tem as seguintes desvantagens:

  • Precisa instalar o Selenium ou o PhantomJS

  • O PhantomJS parou a manutenção

  • O selênio precisa do chromedriver para funcionar

  • O chromedriver possui certos requisitos para a versão do chrome

  • Você precisa usar a biblioteca JS html2canvas ao fazer capturas de tela

Pode-se observar que a construção do ambiente geral (incluindo a correspondência de versões entre vários softwares) ainda requer muito tempo e esforço para se adaptar e testar. Portanto, o autor do artigo original também forneceu uma solução "Docker integrado" no final do artigo acima. Após a dockerização do ambiente acima, o problema de implantação do ambiente pode ser resolvido.

A solução baseada em golang pode resolver perfeitamente os problemas acima. O requisito do ambiente de tempo de execução desta solução é que apenas o navegador chrome precise ser instalado.

O navegador sem cabeça é um formulário sem navegador. Você pode usar todos os recursos suportados pelo navegador sem abrir o navegador, como: obter HTML, executar Javascript, renderizar a página de destino e obter cookies. Este artigo usa principalmente o chrome sem cabeça.O "navegador" mencionado abaixo refere-se ao chrome sem cabeça. A estrutura principal Para usar facilmente o chrome sem cabeça em programas golang, são necessárias algumas estruturas de código aberto. Existem muitas bibliotecas que implementam a interação sem cabeça do cromo.Depois da comparação, eu escolhi o chromedp. Os principais recursos do chromedp são:

  • Fornece uma maneira mais rápida e fácil de dirigir o navegador
  • Fornece uma interface API subjacente avançada (com base no protocolo CDP - Chrome Debugging Protocol)
  • Fornece uma interface API flexível superior (Actions & Tasks), semelhante às ações WebElement do Selenium
  • Exceto pelo próprio navegador, não há dependências externas (como Selenium, PhantomJS etc.)
  • "Compile uma vez, copie em todos os lugares, corra em todos os lugares" (com base nos recursos do golang)

Implementar instalação

go get -u github.com/chromedp/chromedp

Código de implementação da captura de tela

package main

Após a compilação e execução, o efeito da captura de tela da URL no código é o seguinte

image.gif

Exportar PDF Sob essa estrutura, você também pode exportar facilmente a página WEB apontada pelo URL como um arquivo PDF (chame a função "imprimir como PDF" do navegador), basta chamar o seguinte método:

// 导出指定元素为PDF

Tomando o site 360.cn como exemplo, o efeito do PDF exportado é mostrado na figura abaixo

imagem

Use os seguintes métodos para capturar imagens em tela cheia

func main() {

Tomando o site 360.cn como exemplo, o efeito de interceptar uma imagem em tela cheia é mostrado abaixo

imagem

Simular outros dispositivos O Chromedp suporta a simulação de vários dispositivos (modificando a maneira do agente do usuário do navegador), o código a seguir implementa a solicitação para simular o iPhone7:

func main() {

O efeito é o seguinte

imagem

A própria operação combinada chromedp fornece as estruturas de dados Actions e Tasks para os usuários combinarem todas as ações da operação WEB a executar.Você pode verificar os seguintes exemplos na home page do github para obter detalhes. Escreva no final

Usando a estrutura golang e chromedp, com a ajuda da interface CDP do chrome, quase todas as operações do navegador podem ser implementadas no chrome sem cabeça.

No exemplo do 2.1, usamos menos de 40 linhas de código para implementar a função de captura de tela do navegador do servidor. Ao mesmo tempo, exceto pelo código do navegador chrome, golang SDK e chromedp, não há referência a outros códigos ou ferramentas.

Com base nos resultados dos testes acima, podemos continuar desenvolvendo:

  • Ferramenta conveniente e versátil para a página do servidor [captura de tela / exportação em PDF] para outros projetos de produtos. Cenário de aplicação:
  • O front-end desenvolveu belos gráficos de estilo, que precisam ser exportados como imagens ou PDFs como anexos de email e enviados aos usuários para visualização;
  • Envie indicadores e gráficos importantes para a caixa de correio do usuário regularmente, sem que o usuário faça login no sistema para visualizar os dados
  • Desenvolva uma [plataforma de testes automatizados WEB] eficiente para automatizar o teste de produtos WEB. Cenário de aplicação:
  • Após a atualização do ambiente on-line, execute automaticamente casos de teste e funções de chave de teste (logon, adição, exibição de dados de teste, verificação de dados de retorno da interface etc.)

Recomendação de serviço

Publicado 0 artigos originais · gostei 0 · visitas 338

Acho que você gosta

Origin blog.csdn.net/weixin_47143210/article/details/105659098
Recomendado
Clasificación