Executando o selênio sem cabeça com cromo

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

Felizmente, você pode configurar o Selenium para executar o navegador Chrome Web no modo sem cabeça. Nesse modo, o navegador Chrome Web será executado sem qualquer interface gráfica do usuário. Portanto, o selênio pode fazer automação da web, sucata na web, testes de navegador, etc. Usando o navegador Chrome Web em servidores Linux, onde você não tem nenhum ambiente gráfico de desktop instalado.

Neste artigo, vou mostrar como administrar o Selenium com o navegador Chrome Web no modo sem cabeça. Vou usar a Biblioteca de Selênio Python e escrever os scripts de selênio 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. Não deixe de conferir se precisar de alguma assistência.

Preparando o ambiente virtual do Python 3 para o projeto:

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

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

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

$ sudo pip3 install virtualenv

Pitão virtualenv deve ser instalado.

Crie um diretório de projeto Chrome sem cabeça/ No seu diretório de trabalho atual da seguinte maneira:

$ mkdir -pv Chrome -heless/drivers

Navegue até o seu diretório de projeto recém -criado Chrome sem cabeça/ do seguinte modo:

$ CD Chrome heless /

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

$ virtualenv .Venv

O ambiente virtual de python deve ser criado no .Venv/ diretório em seu diretório de projeto.

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

$ fonte .venv/bin/ativar

Instalando a Biblioteca de Selenium Python:

A Biblioteca de Selênio está disponível no repositório oficial do Python Pypi.

Você pode instalar a Biblioteca de Python de Selenium usando o PIP 3 da seguinte forma:

$ PIP3 Instale o selênio

A biblioteca Selênio Python deve ser instalada.

Instalando o Chrome Web Driver:

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

Nesta seção, vou mostrar como instalar o driver da web chrome.

Primeiro, abra o Google Chrome e visite Chrome: // Configurações/Ajuda.

Depois que a página carregar, você deve encontrar o número da versão do Google Chrome no Sobre Chrome seção. Observe as três primeiras seções do número da versão, marcadas na captura de tela abaixo.

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

No Lançamentos atuais Seção, o Chrome Web Driver para os lançamentos mais atuais do navegador do Google Chrome deve estar disponível, como você pode ver na captura de tela abaixo. Um dos lançamentos atuais de driver do Chrome deve ter um número de versão correspondente com seu navegador da web do Google Chrome. As três primeiras seções do número de versão do Chrome Web Driver e Google Chrome Web navegador 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ê poderá encontrá -lo.

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

O arquivo do driver da web do Chrome deve ser baixado.

O baixado Chromedriver_linux64.fecho eclair o 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 Driver da Web Chrome for extraído, como você pode ver na captura de tela abaixo.

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

Nesta seção, vou mostrar como executar o selênio usando o driver Chrome no modo sem cabeça.

Primeiro, crie um novo script python Ex01.py no seu diretório de projeto e digite as seguintes linhas de códigos.

do selênio importar webdriver
de selênio.WebDriver.comum.teclas de importação
de selênio.WebDriver.cromada.Opções de importação de opções
Chromeoptions = Opções ()
Chromeoptions.sem cabeça = verdadeiro
navegador = webdriver.Chrome (executável_path = "./Drivers/Chromedriver ", Options = Chromeoptions)
navegador.Get ("http: // linuxhint.com ")
Print ("Title: % s" % navegador.título)
navegador.desistir()

Depois de terminar, salve o Ex01.py Script Python.

Essas linhas importam todas as coisas necessárias do selênio biblioteca.

Como eu disse anteriormente, por padrão, o driver do Chrome tenta executar o Google Chrome no modo gráfico. Para executar o Google Chrome no modo sem cabeça, temos que dizer ao Chrome Driver 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 sem cabeça simplesmente definindo o sem cabeça propriedade do Chromeoptions objetar para Verdadeiro.

Ou, você pode usar o add_argument () Método do Chromeoptions Objeto de adicionar o -sem cabeça Argumento de linha de comando para executar o Google Chrome no modo sem cabeça usando o driver da web de Selenium Chrome.

Você pode usar um WebDriver.Cromada() Método para inicializar/executar um navegador do Google Chrome do Selenium. O executável_path O argumento é usado para dizer ao selênio para usar o cromedriver binário do motoristas/ Diretório do projeto. O opções O argumento diz ao selênio para usar nossas opções personalizadas Chromeoptions.

Uma vez que o Selenium executa um navegador do Google Chrome usando o driver da web de Selenium Chrome, ele retorna um navegador objeto. Podemos usá -lo para controlar a instância do Google Chrome mais tarde.

O navegador.pegar() O método carrega o Linuxhint.com Site no navegador do Google Chrome em segundo plano (no modo sem cabeça).

Depois que a página carregar, navegador.título A propriedade terá o título do site. O python imprimir() Método imprime o título do site no console.

Então o navegador.desistir() Método fecha o navegador do Google Chrome.

Para testar se o selênio pode funcionar no modo sem cabeça, execute o script python Ex01.py do seguinte modo:

$ python3 ex01.py

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

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

Raspagem na web com selênio no modo sem cabeça usando o driver da web Chrome:

Nesta seção, vou mostrar um exemplo de sucata na web em selênio usando o driver da web chrome no modo sem cabeça.

Primeiro, visite o gerador de nome aleatório.Informações do Google Chrome ou de qualquer outro navegador da Web. Este site gerará 10 nomes aleatórios cada vez que você recarregue a página, como pode ver na captura de tela abaixo. Nosso objetivo é extrair esses nomes aleatórios usando selênio no modo sem cabeça.

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

Ferramenta de desenvolvedor do Chrome deve ser aberto. Clique no Inspecione o ícone () conforme marcado na captura de tela abaixo.

Então, pairar sobre a lista de Nomes aleatórios. A lista deve ser destacada como marcado na captura de tela 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 Ferramenta de desenvolvedor do Chrome. 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.

A partir disso, podemos dizer isso 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 (basta substituir 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.

do selênio importar webdriver
de selênio.WebDriver.comum.teclas de importação
de selênio.WebDriver.cromada.Opções de importação de opções
Chromeoptions = Opções ()
Chromeoptions.sem cabeça = verdadeiro
navegador = webdriver.Chrome (executável_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.desistir()

Depois de terminar, salve o ex02.py Script Python.

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

A linha 10 carrega o site do gerador de nomes aleatórios usando o navegador.pegar() 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 O loop é usado para iterar através do lista de nomes lista de li elementos. Em cada iteração, o conteúdo do li O 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 pela segunda vez, ele deve retornar uma nova lista de nomes aleatórios, como você pode ver na captura de tela abaixo.

Problemas que você pode enfrentar em execução de selênio no modo sem cabeça:

Você já viu anteriormente que a execução do selênio no modo sem cabeça usando o driver Chrome é tão fácil quanto definir 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 enquanto executa o Selenium no modo sem cabeça usando o driver da web do Chrome.

Por padrão, o navegador do Google Chrome faz muitas sandboxing (executa muitas coisas em um ambiente isolado). Isso pode causar problemas ao executar o selênio no modo sem cabeça usando o driver da web do Chrome. Você pode desativar a caixa de areia para o Google Chrome usando o -sem areia bandeira.

Para adicionar o -sem areia sinalizador, adicione a seguinte linha antes de inicializar o driver de cromo de selênio usando WebDriver.Cromada() método (Linha 8 em Ex01.py Script python).

Chromeoptions.add_argument ("-sem areia")

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

Por exemplo, para definir a largura da tela virtual como 1280 px e altura para 720 px, Adicione o -tamanho da janela Opção de linha de comando antes de inicializar o driver de cromo de selênio usando WebDriver.Cromada() método (Linha 8 em Ex01.py Script python) da seguinte forma:

Chromeoptions.add_argument ("-window-size = 1280.720")

Seu servidor pode não ter uma GPU instalada, ou pode ter uma GPU que o navegador do 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 suportada estiver disponível. Em alguns casos, pode não fazer isso. Nesse caso, o selênio pode não ser capaz de executar o navegador da web do Google Chrome no modo sem cabeça. Para resolver esse problema, você precisa desativar a aceleração da GPU usando o -desativar-gpu bandeira.

Para adicionar o -desativar-gpu sinalizador, adicione a seguinte linha antes de inicializar o driver de cromo de selênio usando WebDriver.Cromada() método (Linha 8 em Ex01.py Script python).

Chromeoptions.add_argument ("-desabilitar-gpu")

Conclusão:

Neste artigo, mostrei como configurar o Selenium no modo sem cabeça 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 de selênio sem cabeça, testes da web e raspagem na web.

Eu também cobri alguns dos argumentos/bandeiras da linha de comando do Google Chrome que você pode usar para resolver alguns dos problemas que você pode ter ao executar o selênio em modo sem cabeça usando o driver da web do Chrome.

Há muito mais opções de linha de comando do Google Chrome disponíveis, que eu não cobri neste artigo. Essas opções de linha de comando podem ser úteis para o seu projeto. Você pode encontrar todas as opções de linha de comando do Google Chrome suportadas na lista de interruptores de linha de comando do Chromium por Peter Beverloo Page.