Selenium WebDriver ao serviço do desenvolvedor

Decodificação do relatório de Dmitry Kostichev com histórias de back-end // Versão do vídeo dentro

Se você precisar se integrar repentinamente em um recurso de Internet de terceiros e não tiver tempo para descobrir, o Selenium será útil. Dmitry Kostichev contou no exemplo de seu projeto como automatizar o trabalho no navegador sem sair do seu serviço.


Olá pessoal. Meu nome é Dmitry e hoje vou compartilhar minha experiência de uso do Selenium no desenvolvimento de back-end. Para que serve isso? O selênio é necessário para automatizar a interação com alguns recursos da Internet, para nivelar os fatores humanos, preenchendo alguns dados, etc. Para o desenvolvimento, isso pode ser necessário nesses casos quando, por exemplo, não há API no recurso da Internet e assim por diante. E no exemplo do meu projeto, a tarefa era preencher os dados do cliente (antes disso o serviço precisava preparar corretamente todas as informações) e registrá-los neste site, neste caso a MasterCard.



Após uma análise mais aprofundada deste site, foi revelado que não há API para a qual possamos alcançar e fazer tudo. Todo o processamento é realizado em scripts JS, nos quais nada é claro e os dados são todos codificados. A decisão foi tomada - experimentar o Selenium para esses fins, ou seja, prenderemos ao Selenium todo o nosso serviço, que realizará esse registro em algum momento definido.

No final, o que é Selenium e como trabalhar com ele? O projeto Selenium consiste em uma biblioteca que se comunica com a interface do driver da web para um navegador específico. Uma lista de bibliotecas e navegadores disponíveis é mostrada no slide. E agora vou mostrar como funciona aproximadamente no meu projeto.

Assista a um screencast ou a um vídeo detalhado no final da postagem.

Agora o serviço irá gerar um arquivo, faça o upload imediatamente para este site e verifique se tudo foi registrado com sucesso. Aqui, de fato, ele cola, carrega e assim por diante. E agora ele provavelmente vai pular no fato de que tudo será bem sucedido. A automação é rápida o suficiente e não requer grandes recursos. Aparentemente, tudo estava perfeitamente registrado.

Como cozinhar tudo isso? A biblioteca Selenium possui comandos básicos como:

  • Criando um driver da Web de instância para um navegador específico;
  • Cliques em links;
  • Trabalhar com elementos: cliques, etc.

O driver da web permite que você receba sessões e cookies como em um navegador normal. Você também pode alterá-los e personalizar por si mesmo. Você também pode executar scripts js na página. Existe uma biblioteca que estende essa funcionalidade do próprio Selenium, chamada Selenide. Sua principal característica é ocultar a criação de drivers de instância. Como exemplo, vemos que simplesmente chamamos o comando open, fornecemos algum tipo de link e o navegador já está iniciando, não há necessidade de configurar nada. E a biblioteca expande o trabalho com elementos, algumas predefinições adicionais. Tudo parece conveniente, você pode descobrir rapidamente e usar tudo.

Ao trabalhar com recursos on-line e, finalmente, com o Selenium, existem alguns padrões de design. E um deles são objetos de página. Sua essência está no fato de descrevermos todos esses elementos em uma determinada classe. E então podemos reutilizá-lo e parece mais fácil. Aqui está algo como isto: chamamos o comando open, damos a classe de objetos de página e, em seguida, podemos usar todos os seus métodos, por exemplo, trabalhando com elementos.



Pesquisamos elementos pelo modelo DOM da página HTML por seletores como xpath, css e outros. Suas principais diferenças, por exemplo, entre xpath e css, são que o xpath pode ir "profundo", além de subir e descer. E css, pelo contrário, é apenas baixo. Ou seja, esses são os seletores mais usados.



Por fim, precisamos de um navegador diretamente, o qual a Selenoid pode nos ajudar diretamente. Em essência, é uma estrutura que controla a criação e modificação desses contêineres com navegadores. Mas foi projetado mais para sistemas carregados em que esses navegadores são criados em grandes números. E em nossa situação, isso não é muito necessário, mas use apenas o próprio contêiner. E agora vou mostrar como isso já deve funcionar no servidor.

Na verdade, a interação da página se parece com isso, é um processamento de dados bastante linear. Nesse caso, eu dividi em etapas - transições para páginas. É aqui que os dados são preenchidos e, diretamente, baixados por arquivos. Em princípio, tudo é bastante simples. É assim que uma classe de objeto de página se parece, uma reminiscência de um DTO. Simplesmente descrevemos os elementos, por exemplo, aqui no caso atual do PCSS Selectum. Esta é a sintaxe do Selenide.



Para que isso funcione, precisamos de uma descrição do driver Remoto para conectar-se ao contêiner do docker. As principais configurações que você precisa para chegar lá são o navegador que usaremos e, de fato, a resolução e outras linhas importantes para o navegador. Mas, para trabalhar com o contêiner do docker, você também precisará de configurações como o modo sem cabeça. Ou seja, em sua forma atual, ele girará no servidor. Este modo desativa os gráficos no navegador, para que ele funcione mais rápido e consuma menos recursos.

Além disso, não haverá Sandbox, que é desativado pela segurança do Chromium nesse caso, e será possível executar seu próprio código, JS ou outro. O terceiro parâmetro é necessário para que o Chromium funcione normalmente em máquinas unix, grave corretamente os arquivos de andamento. E o quarto, de fato, é necessário para que possamos enviar arquivos. E o mais importante, o driver Remoto possui um sinalizador que permite baixar um arquivo do armazenamento local em que o aplicativo está sendo executado, já por meio do driver Remover.



Agora vou mostrar como ele funciona com o contêiner do docker. Faça o download do contêiner do docker e do próprio aplicativo. Também será lançado aproximadamente da mesma maneira, ou seja, em princípio, nada de novo será. Somente aqui veremos a interação em algum tipo de log. Em princípio, eles também podem ser monitorados, trabalhar com eles e assim por diante. Portanto, você pode entender a interação que está acontecendo. Essa é a saída do contêiner do Docker com o Chromium diretamente onde o navegador está.



Em princípio, tudo funciona perfeitamente com o contêiner do docker. Além disso, tudo é verificado e o registro é concluído com êxito. Além disso, que problemas gerais poderiam ser encontrados nessa abordagem? Eu não tinha tanto problema quanto ignorância. As transferências de arquivos no contêiner do docker, como sempre, fazem tudo - a mudança de volume. Porém, nesse caso, se você ainda deseja executar localmente, precisará ter duas configurações para o projeto, mas, como se viu, o driver Remoto pode ser configurado através do sinalizador. Ele pode transferir esse arquivo diretamente através de si mesmo, e não são necessários gestos adicionais.

Você também terá que seguir a página com a qual trabalhamos - um recurso on-line. Porque, no meu caso, esse é outro sistema, com o qual ninguém tem um relacionamento da minha equipe, e isso também precisa ser monitorado, monitorado por logs e assim por diante. Como no navegador, ele é constantemente atualizado, você precisa monitorá-lo, o suporte pode cair. Bem, em princípio, você pode configurar os logs de alguma forma e não haverá problemas.

No final, quão mais fácil se tornou? Pareceu-me que eu era capaz de resolver o problema de interagir com este site muito mais rapidamente do que se soubesse o código js. Ou seja, entender o Selenium e a interação pode ser mais rápido do que com o fato de os dados serem codificados e não se saber como transcodificá-los novamente. O principal é a velocidade no desenvolvimento.

Denunciar vídeo - a partir das 16h30


All Articles