Introdução ao selênio em Python 3

Introdução ao selênio em Python 3
Selênio é uma estrutura usada para testar aplicativos da Web. O selênio automatiza um navegador, como Chrome ou Firefox, para executar testes no site desejado. O selênio também é uma ferramenta de raspagem na web muito poderosa. O selênio suporta JavaScript e todos os recursos modernos do navegador. Esta ferramenta é muito eficaz na extração de informações dos sites.

Este artigo mostrará como configurar o selênio em sua distribuição Linux (i.e., Ubuntu), bem como como executar a automação da Web básica e a demolição da Web com a Biblioteca Selenium Python 3.

Pré -requisitos

Para experimentar os comandos e exemplos usados ​​neste artigo, você deve ter o seguinte:

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) O navegador do Google Chrome ou Firefox instalado no seu computador.

Você pode encontrar muitos artigos sobre esses tópicos no Linuxhint.com. Certifique -se de verificar esses artigos se precisar de mais assistência.

Preparando o ambiente virtual do Python 3 para o projeto

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

O python virtualenv O módulo é usado para gerenciar ambientes virtuais de Python.

Você pode instalar o python virtualenv módulo globalmente usando o PIP 3, como segue:

$ sudo pip3 install virtualenv

PIP3 baixará e instalará globalmente todos os módulos necessários.

Neste ponto, o Python virtualenv O módulo deve ser instalado globalmente.

Crie o diretório do projeto python-selenium-Basic/ No seu diretório de trabalho atual, como segue:

$ mkdir -pv python-selenium-basic/drivers

Navegue até o seu diretório de projeto recém -criado python-selenium-Basic/, do seguinte modo:

$ CD Python-selenium-Basic/

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

$ virtualenv .Env

O ambiente virtual do Python agora deve ser criado em seu diretório de projeto.'

Ative o ambiente virtual do Python em seu diretório de projeto através do seguinte comando:

$ fonte .Env/bin/ativar

Como você pode ver, o ambiente virtual do Python é ativado para este diretório de projeto.

Instalando a Biblioteca de Selenium Python

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

Você pode instalar esta biblioteca usando o PIP 3, como segue:

$ PIP3 Instale o selênio

A biblioteca Selênio Python agora deve ser instalada.

Agora que a biblioteca Selênio Python está instalada, a próxima coisa que você precisa fazer é instalar um driver da web para o seu navegador da web favorito. Neste artigo, mostrarei como instalar os drivers da web do Firefox e Chrome para Selenium.

Instalando o driver do Firefox Gecko

O driver do Firefox Gecko permite controlar ou automatizar o navegador da Web do Firefox usando o Selenium.

Para baixar o motorista do Firefox Gecko, visite a página do GitHub de Mozilla/Geckodriver de um navegador da web.

Como você pode ver, v0.26.0 é a versão mais recente do motorista do Firefox Gecko no momento em que este artigo foi escrito.

Para baixar o motorista do Firefox Gecko, role um pouco para baixo e clique no alcatrão Linux Geckodriver.Arquivo GZ, dependendo da sua arquitetura do sistema operacional.

Se você estiver usando um sistema operacional de 32 bits, clique no Geckodriver-v0.26.0-Linux32.alcatrão.gz link.

Se você estiver usando um sistema operacional de 64 bits, clique no Geckodriver-v0.26.0-Linuxxx64.alcatrão.gz link.

No meu caso, vou baixar a versão de 64 bits do driver do Firefox Gecko.

Seu navegador deve solicitar que você salve o arquivo. Selecione Salvar Arquivo e depois clique OK.

O arquivo de motorista do Firefox Gecko deve ser baixado no ~/Downloads diretório.

Extraia o Geckodriver-v0.26.0-Linux64.alcatrão.gz Arquivo do ~/Downloads diretório para o motoristas/ Diretório do seu projeto inserindo o seguinte comando:

$ tar -xzf ~/downloads/geckodriver -v0.26.0-Linux64.alcatrão.GZ -C Drivers/

Uma vez extraído o arquivo do motorista do Firefox Gecko, um novo Geckodriver O arquivo binário deve ser criado no motoristas/ Diretório do seu projeto, como você pode ver na captura de tela abaixo.

Testando o driver de selenium Firefox Gecko

Nesta seção, mostrarei como configurar seu primeiro script de Python de Selenium para testar se o driver do Firefox Gecko está funcionando.

Primeiro, abra o diretório do projeto python-selenium-Basic/ com seu IDE ou editor favorito. Neste artigo, usarei o código do Visual Studio.

Crie o novo script python Ex01.py, e digite as seguintes linhas no script.

do selênio importar webdriver
de selênio.WebDriver.comum.teclas de importação
Desde o tempo de importação do sono
navegador = webdriver.Firefox (executável_path = "./Drivers/Geckodriver ")
navegador.Get ('http: // www.Google.com ')
sono (5)
navegador.desistir()

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

Vou explicar o código em uma seção posterior deste artigo.

A linha seguinte configura o selênio para usar o motorista do Firefox Gecko do motoristas/ Diretório do seu projeto.

Para testar se o motorista do Firefox Gecko está trabalhando com o selênio, execute o seguinte Ex01.py Script Python:

$ python3 ex01.py

O navegador da Web do Firefox deve visitar automaticamente o Google.com e feche -se depois de 5 segundos. Se isso ocorrer, então o motorista do Selênio Firefox está funcionando corretamente.

Instalando o Chrome Web Driver

O Chrome Web Driver permite controlar ou automatizar o navegador do Google Chrome usando o Selenium.

Você deve baixar a mesma versão do driver da web do Chrome que o do seu navegador da web do Google Chrome.

Para encontrar o número da versão do seu navegador do Google Chrome, visite Chrome: // Configurações/Ajuda no Google Chrome. O número da versão deve estar no Sobre Chrome seção, como você pode ver na captura de tela abaixo.

No meu caso, o número da versão é 83.0.4103.116. As três primeiras partes do número da versão (83.0.4103, no meu caso) deve corresponder às três primeiras partes do número da versão do Chrome Web Driver.

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

No Lançamentos atuais Seção, o driver do Chrome para os lançamentos mais atuais do navegador do Google Chrome estará disponível, como você pode ver na captura de tela abaixo.

Se a versão do Google Chrome que você está usando não estiver no Lançamentos atuais seção, role um pouco para baixo e você deve encontrar a versão desejada.

Depois de clicar na versão correta do driver do Chrome, ele deve levá -lo à página seguinte. Clique no Chromedriver_linux64.fecho eclair link, conforme indicado na captura de tela abaixo.

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

O arquivo do driver da web do Chrome agora deve ser baixado no ~/Downloads diretório.

Você pode extrair o cromedriver-linux64.fecho eclair Arquivo do ~/Downloads diretório para o motoristas/ Diretório do seu projeto com o seguinte comando:

$ UNZIP ~/Downloads/Chromedriver_linux64.Drivers Zip -d/

Uma vez extraído o arquivo do driver do Chrome, um novo cromedriver O arquivo binário deve ser criado no motoristas/ Diretório do seu projeto, como você pode ver na captura de tela abaixo.

Testando o driver da web de selenium chrome

Nesta seção, mostrarei como configurar seu primeiro script de Python de Selenium para testar se o driver da web do Chrome está funcionando.

Primeiro, crie o novo script python ex02.py, e digite as seguintes linhas de códigos no script.

do selênio importar webdriver
de selênio.WebDriver.comum.teclas de importação
Desde o tempo de importação do sono
navegador = webdriver.Chrome (executável_path = "./Drivers/Chromedriver ")
navegador.Get ('http: // www.Google.com ')
sono (5)
navegador.desistir()

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

Vou explicar o código em uma seção posterior deste artigo.

A linha seguinte configura o selênio para usar o driver da web do Chrome do motoristas/ Diretório do seu projeto.

Para testar se o driver da web do Chrome está trabalhando com o selênio, execute o ex02.py Script Python, como segue:

$ python3 ex01.py

O navegador do Google Chrome deve visitar automaticamente o Google.com e feche -se depois de 5 segundos. Se isso ocorrer, então o motorista do Selênio Firefox está funcionando corretamente.

Noções básicas de raspagem na web com selênio

Eu estarei usando o navegador da web do Firefox a partir de agora. Você também pode usar o Chrome, se quiser.

Um script básico de selênio em python deve se parecer com o script mostrado na captura de tela abaixo.

Primeiro, importe o selênio WebDriver de selênio módulo.

Em seguida, importe o Chaves de selênio.WebDriver.comum.chaves. Isso ajudará você a enviar as prensas de teclado para o navegador que você está automatizando do Selenium.

A linha a seguir cria um navegador Objeto para o navegador da Web do Firefox usando o Driver do Firefox Gecko (WebDriver). Você pode controlar as ações do navegador do Firefox usando este objeto.

Para carregar um site ou URL (estarei carregando o site https: // www.Duckduckgo.com), chame o pegar() Método do navegador Objeto no seu navegador Firefox.

Usando o selênio, você pode escrever seus testes, realizar sucata na web e, finalmente, fechar o navegador usando o desistir() Método do navegador objeto.

Acima está o layout básico de um script de selênio python. Você estará escrevendo essas linhas em todos os seus scripts de Selênio Python.

Exemplo 1: Imprimir o título de uma página da web

Este será o exemplo mais fácil discutido usando o selênio. Neste exemplo, imprimiremos o título da página da web que estaremos visitando.

Crie o novo arquivo ex04.py e digite as seguintes linhas de códigos nele.

do selênio importar webdriver
de selênio.WebDriver.comum.teclas de importação
navegador = webdriver.Firefox (executável_path = "./Drivers/Geckodriver ")
navegador.get ('https: // www.Duckduckgo.com ')
Print ("Title: % s" % navegador.título)
navegador.desistir()

Depois de terminar, salve o arquivo.

Aqui o navegador.título é usado para acessar o título da página da web visitada e o imprimir() A função será usada para imprimir o título no console.

Depois de executar o ex04.py script, deve:

1) Abra o Firefox
2) Carregue a página da web desejada
3) busque o título da página
4) Imprima o título no console
5) e finalmente, feche o navegador

Como você pode ver, o ex04.py O script imprimiu o título da página da web muito bem no console.

$ python3 ex04.py

Exemplo 2: Imprimir os títulos de várias páginas da web

Como no exemplo anterior, você pode usar o mesmo método para imprimir o título de várias páginas da web usando o loop python.

Para entender como isso funciona, crie o novo script python Ex05.py e digite as seguintes linhas de código no script:

do selênio importar webdriver
de selênio.WebDriver.comum.teclas de importação
navegador = webdriver.Firefox (executável_path = "./Drivers/Geckodriver ")
urls = ['https: // www.Duckduckgo.com ',' https: // linuxhint.com ',' https: // yahoo.com ']
Para URL em URLs:
navegador.Get (URL)
Print ("Title: % s" % navegador.título)
navegador.desistir()

Depois de terminar, salve o script python Ex05.py.

Aqui o URLs Lista mantém o URL de cada página da web.

A para O loop é usado para iterar através do URLs lista de itens.

Em cada iteração, o selênio diz ao navegador para visitar o url e obtenha o título da página da web. Depois que o selênio extraiu o título da página da web, ele é impresso no console.

Execute o script python Ex05.py, e você deve ver o título de cada página da web no URLs lista.

$ python3 ex05.py

Este é um exemplo de como o selênio pode executar a mesma tarefa com várias páginas da web ou sites.

Exemplo 3: Extraindo dados de uma página da web

Neste exemplo, mostrarei o básico da extração de dados de páginas da web usando o Selenium. Isso também é conhecido como raspagem na web.

Primeiro, visite o aleatório.Org Link do Firefox. A página deve gerar uma string aleatória, como você pode ver na captura de tela abaixo.

Para extrair os dados aleatórios de string usando selênio, você também deve conhecer a representação HTML dos dados.

Para ver como os dados aleatórios da string são representados no HTML, selecione os dados aleatórios da string e pressione o botão direito do mouse (RMB) e clique em Inspecione o elemento (Q), conforme anotado na captura de tela abaixo.

A representação HTML dos dados deve ser exibida no Inspetor guia, como você pode ver na captura de tela abaixo.

Você também pode clicar no Inspecione o ícone ( ) Para inspecionar os dados da página.

Clique no ícone Inspect. A representação HTML dos dados deve ser exibida como antes.

Como você pode ver, os dados aleatórios da string são embrulhados em um html pré tag e contém a classe dados.

Agora que conhecemos a representação HTML dos dados que queremos extrair, criaremos um script python para extrair os dados usando selênio.

Crie o novo script python Ex06.py e digite as seguintes linhas de códigos no script

do selênio importar webdriver
de selênio.WebDriver.comum.teclas de importação
navegador = webdriver.Firefox (executável_path = "./Drivers/Geckodriver ")
navegador.Get ("https: // www.aleatório.org/strings/?num = 1 & len = 20 e dígitos
= ON & UPPERALPHA = ON & BEBRANDALPHA = ON & ULICE = ON & FORMAT = HTML & RND = NOVO ")
dataElement = navegador.find_element_by_css_selector ('pré.dados')
Imprimir (DataElement.texto)
navegador.desistir()

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

Aqui o navegador.pegar() Método carrega a página da web no navegador Firefox.

O navegador.find_element_by_css_selector () Método pesquisa o código HTML da página para obter um elemento específico e o retorna.

Nesse caso, o elemento seria pré.dados, o pré tag que tem o nome da classe dados.

Abaixo de pré.dados elemento foi armazenado no DataElement variável.

O script então imprime o conteúdo de texto do selecionado pré.dados elemento.

Se você executar o Ex06.py Script Python, ele deve extrair os dados aleatórios da string da página da web, como você pode ver na captura de tela abaixo.

$ python3 ex06.py

Como você pode ver, cada vez que eu corro o Ex06.py Script Python, ele extrai um dado de string aleatório diferente da página da web.

Exemplo 4: Extraindo a lista de dados da página da web

O exemplo anterior mostrou como extrair um único elemento de dados de uma página da web usando selênio. Neste exemplo, mostrarei como usar o Selenium para extrair uma lista de dados de uma página da web.

Primeiro, visite o gerador de nome aleatório.Informações do seu navegador da Web do Firefox. Este site gerará dez 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.

Se você inspecionar a lista de nomes mais de perto, poderá ver que é uma lista ordenada (ol marcação). O ol Tag também inclui o nome da classe lista de nomes. Cada um dos nomes aleatórios é representado como um item de lista (li tag) dentro do ol marcação.

Para extrair esses nomes aleatórios, crie o novo script python ex07.py e digite as seguintes linhas de códigos no script.

do selênio importar webdriver
de selênio.WebDriver.comum.teclas de importação
navegador = webdriver.Firefox (executável_path = "./Drivers/Geckodriver ")
navegador.Get ("http: // Random-Name-Generator.info/")
namelist = navegador.find_elements_by_css_selector ('Ol.namelist li ')
para nome em namelist:
Imprimir (nome.texto)
navegador.desistir()

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

Aqui o navegador.pegar() Método carrega a página da web geradora de nomes aleatórios no navegador Firefox.

O navegador.find_elements_by_css_selector () O método usa o seletor CSS ol.Namelist Li para encontrar tudo li elementos dentro do ol tag tendo o nome da classe lista de nomes. Eu armazenei todos os selecionados li elementos no lista de nomes variável.

A 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.

Se você executar o ex07.py Script Python, ele buscará todos os nomes aleatórios da página da web e a imprimirá na tela, como você pode ver na captura de tela abaixo.

$ python3 ex07.py

Se você executar o script pela segunda vez, ele deve retornar uma nova lista de nomes de usuário aleatórios, como você pode ver na captura de tela abaixo.

Exemplo 5: Formulário de envio - pesquisando no DuckDuckgo

Este exemplo é tão simples quanto o primeiro exemplo. Neste exemplo, visitarei o mecanismo de busca do DuckDuckgo e pesquisarei o termo seleênio HQ usando selênio.

Primeiro, visite o mecanismo de busca do DuckDuckgo do navegador da Web do Firefox.

Se você inspecionar o campo de entrada de pesquisa, ele deve ter o ID Search_form_input_homepage, Como você pode ver na captura de tela abaixo.

Agora, crie o novo script python ex08.py e digite as seguintes linhas de códigos no script.

do selênio importar webdriver
de selênio.WebDriver.comum.teclas de importação
navegador = webdriver.Firefox (executável_path = "./Drivers/Geckodriver ")
navegador.Get ("https: // DuckDuckgo.com/")
SearchInput = navegador.find_element_by_id ('search_form_input_homepage')
SearchInput.send_keys ('selanium hq' + chaves.DIGITAR)

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

Aqui o navegador.pegar() O método carrega a página inicial do mecanismo de busca do DuckDuckgo no navegador da Web do Firefox.

O navegador.find_element_by_id () o método seleciona o elemento de entrada com o ID Search_form_input_homepage e o armazena no SearchInput variável.

O SearchInput.send_keys () O método é usado para enviar os dados da imprensa de chaves para o campo de entrada. Neste exemplo, ele envia a string seleênio HQ, e a tecla Enter é pressionada usando o Chaves.DIGITAR constante.

Assim que o mecanismo de busca do DuckDuckgo receber a tecla Enter Press (Chaves.DIGITAR), ele pesquisa e exibe o resultado.

Execute o ex08.py Script Python, como segue:

$ python3 ex08.py

Como você pode ver, o navegador da Web do Firefox visitou o mecanismo de busca do DuckDuckgo.

Ele digitou automaticamente seleênio HQ Na caixa de texto de pesquisa.

Assim que o navegador recebeu a tecla Enter Press (Chaves.DIGITAR), ele exibiu o resultado da pesquisa.

Exemplo 6: enviando um formulário no W3Schools.com

No Exemplo 5, o envio do formulário do mecanismo de pesquisa do DuckDuckgo foi fácil. Tudo que você precisava fazer era pressionar a tecla Enter. Mas este não será o caso de todos os envios de formulários. Neste exemplo, mostrarei a você um manuseio de formulários mais complexo.

Primeiro, visite a página HTML Forms of W3Schools.com do navegador da web do Firefox. Depois que a página carregar, você deve ver um formulário de exemplo. Este é o formulário que enviaremos neste exemplo.

Se você inspecionar o formulário, o Primeiro nome O campo de entrada deve ter o ID fname, o Sobrenome O campo de entrada deve ter o ID lname, e a Botão de envio deve ter o tipo enviar, Como você pode ver na captura de tela abaixo.

Para enviar este formulário usando selênio, crie o novo script python Ex09.py e digite as seguintes linhas de códigos no script.

do selênio importar webdriver
de selênio.WebDriver.comum.teclas de importação
navegador = webdriver.Firefox (executável_path = "./Drivers/Geckodriver ")
navegador.Get ("https: // www.W3schools.com/html/html_forms.asp ")
fname = navegador.find_element_by_id ('fname')
fname.claro()
fname.send_keys ('shahriar')
lname = navegador.find_element_by_id ('lname')
lname.claro()
lname.send_keys ('shovon')
submmitbutton = navegador.find_element_by_css_selector ('input [type = "submit"]')
botão de envio.send_keys (chaves.DIGITAR)

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

Aqui o navegador.pegar() Método abre a página W3Schools HTML Forms no navegador da Web do Firefox.

O navegador.find_element_by_id () O método encontra os campos de entrada pelo ID fname e lname e os armazena no fname e lname variáveis, respectivamente.

O fname.claro() e lname.claro() Métodos limpe o primeiro nome padrão (John) fname Valor e sobrenome (DOE) lname valor dos campos de entrada.

O fname.send_keys () e lname.send_keys () Tipo de métodos Shahriar e Shovon no Primeiro nome e Sobrenome campos de entrada, respectivamente.

O navegador.find_element_by_css_selector () O método seleciona o Botão de envio da forma e o armazena no botão de envio variável.

O botão de envio.send_keys () O método envia a tecla Enter Press (Chaves.DIGITAR) para o Botão de envio da forma. Esta ação envia o formulário.

Execute o Ex09.py Script Python, como segue:

$ python3 ex09.py

Como você pode ver, o formulário foi enviado automaticamente com as entradas corretas.

Conclusão

Este artigo deve ajudá -lo a começar com testes de navegador de selênio, automação da web e bibliotecas de sucata na web no Python 3. Para mais informações, consulte a documentação oficial do Selênio Python.