Selênio

Executando Selenium Headless com Chrome

Executando Selenium Headless com Chrome
Se você quiser fazer automação da web Selenium ou web scrapping com o navegador Chrome, ele executa a versão gráfica do navegador Chrome por padrão. Não é um problema quando você está executando o script Selenium a partir de um ambiente de desktop gráfico Linux (i.e., GNOME 3, KDE, XFCE4). Mas se você deseja executar seu script Selenium em um ambiente sem interface (i.e., Ubuntu Server, CentOS / RHEL Server) onde você não tem nenhum ambiente de desktop gráfico instalado, então isso não funcionará.

Felizmente, você pode configurar o Selenium para executar o navegador Chrome no modo headless. Neste modo, o navegador Chrome será executado sem nenhuma interface gráfica do usuário. Assim, Selenium pode fazer automação web, web scrapping, testes de navegador, etc. usando o navegador da web Chrome em servidores Linux onde você não tem nenhum ambiente gráfico de área de trabalho instalado.

Neste artigo, vou mostrar como executar o Selenium com o navegador Chrome no modo headless. Vou usar a biblioteca Selenium Python e escrever os scripts Selenium usando a linguagem de programação Python 3. Então vamos começar.

Pré-requisitos:

Para experimentar os comandos e exemplos deste artigo, você deve ter,

1) Uma distribuição Linux (de preferência Ubuntu) instalada no seu computador.
2) Python 3 instalado em seu computador.
3) PIP 3 instalado no seu computador.
4) Google Chrome instalado em seu computador.

Você pode encontrar muitos artigos sobre esses tópicos no LinuxHint.com. Certifique-se de verificá-los se precisar de alguma ajuda.

Preparando o ambiente virtual Python 3 para o projeto:

O ambiente virtual Python é usado para criar um diretório de projeto Python isolado. Os módulos Python que você instala usando PIP serão instalados apenas no diretório do projeto, não globalmente.

Pitão virtualenv módulo é usado para gerenciar ambientes virtuais Python.

Você pode instalar o Python virtualenv módulo globalmente usando PIP 3 da seguinte forma:

$ sudo pip3 install virtualenv

Pitão virtualenv deve ser instalado.

Crie um diretório de projeto chrome-headless / em seu diretório de trabalho atual da seguinte maneira:

$ mkdir -pv chrome-headless / drivers

Navegue até o diretório do seu projeto recém-criado chrome-headless / do seguinte modo:

$ cd chrome-headless /

Crie um ambiente virtual Python no diretório do seu projeto com o seguinte comando:

$ virtualenv .venv

O ambiente virtual Python deve ser criado no .venv / diretório no diretório do seu projeto.

Ative o ambiente virtual Python do diretório do seu projeto com o seguinte comando:

$ source .venv / bin / activate

Instalando a biblioteca Selenium Python:

A biblioteca Selenium está disponível no repositório oficial Python PyPI.

Você pode instalar a biblioteca Selenium Python usando o PIP 3 da seguinte maneira:

$ pip3 install selenium

A biblioteca Selenium Python deve ser instalada.

Instalando o driver da Web do Chrome:

O Chrome Web Driver permitirá que você controle ou automatize o navegador Google Chrome a partir do Selenium.

Nesta seção, vou mostrar como instalar o driver da Web do Chrome.

Primeiro, abra o Google Chrome e visite chrome: // settings / help.

Assim que a página carregar, você deve encontrar o número da versão do Google Chrome no Sobre o Chrome seção. Observe as 3 primeiras seções do número da versão, conforme marcado na imagem abaixo.

Para baixar o Chrome Web Driver, visite a página oficial de download do Chrome Driver.

No Lançamentos atuais seção, o Chrome Web Driver para as versões mais recentes do navegador Google Chrome deve estar disponível, como você pode ver na captura de tela abaixo. Uma das versões atuais do Chrome Web Driver deve ter um número de versão correspondente ao seu navegador Google Chrome. As primeiras 3 seções do número da versão do Chrome Web Driver e do navegador Google Chrome devem corresponder.

Se a versão que você está procurando não estiver no Lançamentos atuais seção, role um pouco para baixo e você deve ser capaz de encontrá-la.

Depois de clicar no número da versão do Chrome Web Driver, ele deve ir para a página de download. Clique no chromedriver_linux64.fecho eclair arquivo daqui.

O arquivo do Chrome Web Driver deve ser baixado.

O baixado chromedriver_linux64.fecho eclair arquivo deve estar em seu ~ / Downloads diretório.

$ ls -lh ~ / Downloads

Extraia o chromedriver_linux64.fecho eclair arquivo do ~ / Downloads diretório para o motoristas / diretório do seu projeto da seguinte forma:

$ unzip ~ / Downloads / chromedriver_linux64.drivers zip -d /

Um novo arquivo cromedriver deve ser criado no motoristas / diretório do seu projeto assim que o arquivo do Chrome Web Driver for extraído, como você pode ver na captura de tela abaixo.

Testando o driver da Web do Chrome no modo sem cabeça:

Nesta seção, vou mostrar como executar o Selenium usando o driver do Chrome no modo headless.

Primeiro, crie um novo script Python ex01.py no diretório do seu projeto e digite as seguintes linhas de códigos nele.

from selenium import webdriver
de selênio.driver da web.comum.chaves importar chaves
de selênio.driver da web.cromada.opções opções de importação
chromeOptions = Opções ()
chromeOptions.sem cabeça = verdadeiro
navegador = webdriver.Chrome (executable_path = "./ drivers / chromedriver ", options = chromeOptions)
navegador.get ("http: // linuxhint.com ")
imprimir ("Título:% s"% navegador.título)
navegador.Sair()

Quando terminar, salve o ex01.py Script Python.

Essas linhas importam todo o material necessário do selênio biblioteca.

Como eu disse antes, por padrão, o driver do Chrome tenta executar o Google Chrome em modo gráfico. Para executar o Google Chrome no modo headless, temos que dizer ao driver do Chrome para passar algumas opções extras. Esta linha cria um Opções objeto que podemos passar para o driver da web do Chrome mais tarde.

Você pode executar o Google Chrome no modo headless simplesmente configurando o sem cabeça propriedade do chromeOptions objetar a Verdadeiro.

Ou você pode usar o add_argument () método do chromeOptions objeto para adicionar o -sem cabeça argumento de linha de comando para executar o Google Chrome no modo headless usando o driver da web Selenium Chrome.

Você pode usar um driver da web.Cromada() método para inicializar / executar um navegador Google Chrome a partir do Selenium. O executable_path argumento é usado para dizer ao Selenium para usar o cromedriver binário do motoristas / diretório do projeto. O opções argumento diz ao Selenium para usar nossas opções personalizadas chromeOptions.

Depois que o Selenium executa um navegador Google Chrome usando o Selenium Chrome Web Driver, ele retorna um navegador objeto. Podemos usá-lo para controlar a instância do Google Chrome mais tarde.

O navegador.obter() método carrega o linuxhint.com site no navegador Google Chrome em segundo plano (no modo sem cabeça).

Assim que a página carregar, navegador.título propriedade terá o título do site. O Python impressão() método imprime o título do site no console.

Então o navegador.Sair() método fecha o navegador Google Chrome.

Para testar se o Selenium pode funcionar no modo headless, execute o script Python ex01.py do seguinte modo:

$ python3 ex01.py

Deve imprimir o título do site no console sem abrir o navegador Google Chrome no modo gráfico.

Só para mostrar que ele funciona em servidores Linux sem cabeça (onde nenhuma interface gráfica de usuário está instalada), executei o script Python ex01.py no Ubuntu Server 20.04 LTS. Como você pode ver, o script está funcionando bem.

Web Scraping com Selenium no modo Headless usando o driver da Web do Chrome:

Nesta seção, vou mostrar um exemplo de web scrapping no Selenium usando o driver da web do Chrome no modo headless.

Primeiro, visite o gerador de nomes aleatórios.informações do Google Chrome ou de qualquer outro navegador da web. Este site irá gerar 10 nomes aleatórios cada vez que você recarregar a página, como você pode ver na imagem abaixo. Nosso objetivo é extrair esses nomes aleatórios usando Selenium no modo headless.

Para descobrir a estrutura HTML da lista, você deve abrir o Chrome Developer Tool. Para fazer isso, pressione o botão direito do mouse (RMB) na página e clique em Inspecionar ou pressione + + eu.

Chrome Developer Tool deve ser aberto. Clique no Ícone de inspeção () como marcado na imagem abaixo.

Em seguida, passe o mouse sobre a lista de Nomes aleatórios. A lista deve ser destacada conforme marcado na imagem abaixo. Em seguida, pressione o botão esquerdo do mouse (LMB) para selecionar a lista.

O código HTML da lista deve ser destacado no Elementos guia do Chrome Developer Tool. Aqui, a lista de nomes aleatórios está dentro de um div elemento. O div elemento tem o aula nome resultados. Dentro dele, temos um ol elemento com o aula nome lista de nomes. Dentro de ol elemento, cada um dos nomes está em um li elemento.

Disto podemos dizer que para chegar ao li tags, temos que seguir div.resultados> ol.nameList> li

Então, nosso seletor de CSS será div.resultados ol.nameList li (apenas substitua o > sinais com espaço em branco)

Para extrair esses nomes aleatórios, crie um novo script Python ex02.py e digite as seguintes linhas de códigos nele.

from selenium import webdriver
de selênio.driver da web.comum.chaves importar chaves
de selênio.driver da web.cromada.opções opções de importação
chromeOptions = Opções ()
chromeOptions.sem cabeça = verdadeiro
navegador = webdriver.Chrome (executable_path = "./ drivers / chromedriver ", options = chromeOptions)
navegador.get ("http: // random-name-generator.info / ")
nameList = navegador.find_elements_by_css_selector ('div.resultados ol.nameList li ')
para nome em nameList:
imprimir (nome.texto)
navegador.Sair()

Quando terminar, salve o ex02.py Script Python.

Eu expliquei as linhas 1 a 8 na seção anterior deste artigo. Estes são os mesmos que em ex01.py.

A linha 10 carrega o site gerador de nomes aleatórios usando o navegador.obter() método.

A linha 11 seleciona a lista de nomes usando o navegador.find_elements_by_css_selector () método. Este método usa o seletor CSS div.resultados ol.nameList li para encontrar a lista de nomes. Então, a lista de nomes é armazenada no lista de nomes variável.

Nas linhas 13 e 14, um para loop é usado para iterar através do lista de nomes lista de li elementos. Em cada iteração, o conteúdo do li elemento é impresso no console.

Agora, execute o script Python ex02.py do seguinte modo:

$ python3 ex02.py

Como você pode ver, o script Python ex02.py buscou todos os nomes aleatórios da página da web.

Se você executar o script uma segunda vez, ele deve retornar uma nova lista de nomes aleatórios, como você pode ver na imagem abaixo.

Problemas que você pode enfrentar ao executar o Selenium no modo sem cabeça:

Você viu anteriormente que executar o Selenium no modo headless usando o driver do Chrome é tão fácil quanto configurar o chromeOptions.sem cabeça bandeira para Verdadeiro.

Esta solução pode não funcionar para você em algumas distribuições Linux. Nesta seção, vou falar sobre alguns dos problemas que você pode enfrentar ao executar o Selenium no modo headless usando o driver da web do Chrome.

Por padrão, o navegador Google Chrome executa muitos processos de sandbox (executa muitas coisas em um ambiente isolado). Isso pode causar problemas ao executar o Selenium no modo headless usando o driver da web do Chrome. Você pode desativar o sandbox para o Google Chrome usando o -sem sandbox bandeira.

Para adicionar o -sem sandbox sinalizador, adicione a seguinte linha antes de inicializar o driver Selenium Chrome usando driver da web.Cromada() método (linha 8 dentro ex01.py Script Python).

chromeOptions.add_argument ("- no-sandbox")

Você pode ter problemas ao fazer certas coisas no navegador Google Chrome da Selenium, como tirar capturas de tela do site e assim por diante. Isso pode acontecer porque, no modo headless, o Google Chrome pode definir a resolução de tela virtual incorreta. Portanto, seu site pode não parecer certo. Você pode definir a resolução de tela virtual desejada para o navegador Google Chrome no modo headless usando o -tamanho da janela opção de linha de comando.

Por exemplo, para definir a largura da tela virtual para 1280 px e altura para 720 px, Adicione o -tamanho da janela opção de linha de comando antes de inicializar o driver Selenium Chrome usando driver da web.Cromada() método (linha 8 dentro ex01.py Script Python) da seguinte maneira:

chromeOptions.add_argument ("- window-size = 1280,720")

Seu servidor pode não ter uma GPU instalada ou pode ter uma GPU que o navegador Google Chrome não saberá como usar. Por padrão, o Google Chrome deve desativar automaticamente a aceleração da GPU se uma GPU não estiver disponível ou se uma GPU não compatível estiver disponível. Em alguns casos, pode falhar. Nesse caso, o Selenium pode não ser capaz de executar o navegador Google Chrome no modo headless. Para resolver este problema, você deve desativar a aceleração da GPU usando o -disable-gpu bandeira.

Para adicionar o -disable-gpu sinalizador, adicione a seguinte linha antes de inicializar o driver Selenium Chrome usando driver da web.Cromada() método (linha 8 dentro ex01.py Script Python).

chromeOptions.add_argument (“- disable-gpu”)

Conclusão:

Neste artigo, mostrei como configurar o Selenium no modo headless usando o driver da web do Chrome. Eu cobri o básico, o que ajudará você a começar com a automação do navegador Selenium sem cabeça, testes da web e web scraping.

Também abordei alguns dos argumentos / sinalizadores de linha de comando do Google Chrome que você pode usar para resolver alguns dos problemas que você pode ter ao executar o Selenium no modo headless usando o driver da web do Chrome.

Existem muito mais opções de linha de comando do Google Chrome disponíveis, que não abordei neste artigo. Estas opções de linha de comando podem ser úteis para o seu projeto. Você pode encontrar todas as opções de linha de comando compatíveis do Google Chrome na página Lista de opções de linha de comando do Chromium de Peter Beverloo.

Emular cliques do mouse passando o mouse usando o mouse sem cliques no Windows 10
Usar um mouse ou teclado na postura errada de uso excessivo pode resultar em muitos problemas de saúde, incluindo tensão, síndrome do túnel do carpo e...
Adicione gestos do mouse ao Windows 10 usando essas ferramentas gratuitas
Nos últimos anos, os computadores e sistemas operacionais evoluíram muito. Houve um tempo em que os usuários tinham que usar comandos para navegar pel...
Controle e gerencie o movimento do mouse entre vários monitores no Windows 10
Gerenciador de mouse com tela dupla permite que você controle e configure o movimento do mouse entre vários monitores, diminuindo seus movimentos pert...