Este artigo irá mostrar como configurar o Selenium em sua distribuição Linux (i.e., Ubuntu), bem como realizar automação básica da web e web scrapping 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 Google Chrome ou Firefox instalado em seu computador.
Você pode encontrar muitos artigos sobre esses tópicos em LinuxHint.com. Certifique-se de verificar estes artigos se precisar de mais 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, em vez de globalmente.
O Python 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
PIP3 irá baixar e instalar globalmente todos os módulos necessários.
Neste ponto, o Python virtualenv módulo deve ser instalado globalmente.
Crie o diretório do projeto python-selenium-basic / em seu diretório de trabalho atual, da seguinte maneira:
$ mkdir -pv python-selenium-basic / drivers
Navegue até o diretório do seu projeto recém-criado python-selenium-basic /, do seguinte modo:
$ cd python-selenium-basic /
Crie um ambiente virtual Python no diretório do seu projeto com o seguinte comando:
$ virtualenv .env
O ambiente virtual Python agora deve ser criado no diretório do seu projeto.'
Ative o ambiente virtual Python no diretório do seu projeto por meio do seguinte comando:
$ source .env / bin / ativar
Como você pode ver, o ambiente virtual Python está ativado para este diretório de projeto.
Instalando Selenium Python Library
A biblioteca Selenium Python está disponível no repositório oficial Python PyPI.
Você pode instalar esta biblioteca usando o PIP 3, da seguinte maneira:
$ pip3 install selenium
A biblioteca Selenium Python agora deve ser instalada.
Agora que a biblioteca Selenium Python está instalada, a próxima coisa que você precisa fazer é instalar um driver da web para o seu navegador favorito. Neste artigo, vou mostrar como instalar os drivers da web do Firefox e do Chrome para Selenium.
Instalando o driver Firefox Gecko
O driver Firefox Gecko permite que você controle ou automatize o navegador Firefox usando Selenium.
Para baixar o driver Firefox Gecko, visite a página de lançamentos do GitHub de mozilla / geckodriver em um navegador da web.
Como você pode ver, v0.26.0 é a versão mais recente do driver Firefox Gecko no momento em que este artigo foi escrito.
Para baixar o driver Firefox Gecko, role um pouco para baixo e clique no tar do Linux geckodriver.arquivo gz, dependendo da arquitetura do seu sistema operacional.
Se você estiver usando um sistema operacional de 32 bits, clique no botão geckodriver-v0.26.0-linux32.alcatrão.gz link.
Se você estiver usando um sistema operacional de 64 bits, clique no botão geckodriver-v0.26.0-linuxx64.alcatrão.gz link.
No meu caso, vou baixar a versão de 64 bits do Firefox Gecko Driver.
Seu navegador deve solicitar que você salve o arquivo. Selecione Salvar Arquivo e então clique OK.
O arquivo do driver 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, digitando o seguinte comando:
$ tar -xzf ~ / Downloads / geckodriver-v0.26.0-linux64.alcatrão.drivers gz -C /
Assim que o arquivo do driver Firefox Gecko for extraído, um novo geckodriver arquivo binário deve ser criado no motoristas / diretório do seu projeto, como você pode ver na imagem abaixo.
Testando o driver Selenium Firefox Gecko
Nesta seção, vou mostrar como configurar seu primeiro script Selenium Python para testar se o driver 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.
from selenium import webdriverde selênio.driver da web.comum.chaves importar chaves
do tempo importar dormir
navegador = webdriver.Firefox (executable_path = "./ drivers / geckodriver ")
navegador.get ('http: // www.Google.com ')
dormir (5)
navegador.Sair()
Quando terminar, salve o ex01.py Script Python.
Explicarei o código em uma seção posterior deste artigo.
A linha a seguir configura o Selenium para usar o driver Firefox Gecko do motoristas / diretório do seu projeto.
Para testar se o Firefox Gecko Driver está funcionando com Selenium, execute o seguinte ex01.py Script Python:
$ python3 ex01.py
O navegador Firefox deve visitar o Google automaticamente.com e fecha-se após 5 segundos. Se isso ocorrer, o driver Selenium Firefox Gecko está funcionando corretamente.
Instalando o driver da Web do Chrome
O Chrome Web Driver permite que você controle ou automatize o navegador Google Chrome usando Selenium.
Você deve baixar a mesma versão do Chrome Web Driver que a do seu navegador Google Chrome.
Para encontrar o número da versão do seu navegador Google Chrome, visite chrome: // settings / help no Google Chrome. O número da versão deve estar no Sobre o 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 primeiras três 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 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 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 Chrome Web Driver, você será levado para a página seguinte. Clique no chromedriver_linux64.fecho eclair link, conforme indicado na imagem abaixo.
O arquivo do Chrome Web Driver deve agora ser baixado.
O arquivo do Chrome Web Driver deve agora ser baixado no ~ / Downloads diretório.
Você pode extrair o chromedriver-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 /
Assim que o arquivo do Chrome Web Driver for extraído, um novo cromedriver arquivo binário deve ser criado no motoristas / diretório do seu projeto, como você pode ver na imagem abaixo.
Testando o Selenium Chrome Web Driver
Nesta seção, mostrarei como configurar seu primeiro script Selenium Python 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.
from selenium import webdriverde selênio.driver da web.comum.chaves importar chaves
do tempo importar dormir
navegador = webdriver.Chrome (executable_path = "./ drivers / chromedriver ")
navegador.get ('http: // www.Google.com ')
dormir (5)
navegador.Sair()
Quando terminar, salve o ex02.py Script Python.
Explicarei o código em uma seção posterior deste artigo.
A linha a seguir configura o Selenium para usar o Chrome Web Driver do motoristas / diretório do seu projeto.
Para testar se o Chrome Web Driver está funcionando com Selenium, execute o ex02.py Script Python, da seguinte maneira:
$ python3 ex01.py
O navegador Google Chrome deve visitar o Google automaticamente.com e fecha-se após 5 segundos. Se isso ocorrer, o driver Selenium Firefox Gecko está funcionando corretamente.
Noções básicas de Web Scraping com Selenium
Usarei o navegador Firefox a partir de agora. Você também pode usar o Chrome, se desejar.
Um script Selenium Python básico deve ser parecido com o script mostrado na imagem abaixo.
Primeiro, importe o Selênio driver da web de selênio módulo.
Em seguida, importe o Chaves a partir de selênio.driver da web.comum.chaves. Isso o ajudará a enviar pressionamentos de tecla do teclado para o navegador que você está automatizando a partir do Selenium.
A linha a seguir cria um navegador objeto para o navegador Firefox usando o driver Firefox Gecko (Webdriver). Você pode controlar as ações do navegador Firefox usando este objeto.
Para carregar um site ou URL (irei carregar o site https: // www.duckduckgo.com), ligue para o obter() método do navegador objeto no seu navegador Firefox.
Usando o Selenium, você pode escrever seus testes, executar web scrapping e, finalmente, fechar o navegador usando o Sair() método do navegador objeto.
Acima está o layout básico de um script Selenium Python. Você escreverá essas linhas em todos os seus scripts Selenium Python.
Exemplo 1: Imprimindo o título de uma página da web
Este será o exemplo mais fácil discutido usando Selenium. Neste exemplo, imprimiremos o título da página da web que visitaremos.
Crie o novo arquivo ex04.py e digite as seguintes linhas de códigos nele.
from selenium import webdriverde selênio.driver da web.comum.chaves importar chaves
navegador = webdriver.Firefox (executable_path = "./ drivers / geckodriver ")
navegador.get ('https: // www.duckduckgo.com ')
imprimir ("Título:% s"% navegador.título)
navegador.Sair()
Quando terminar, salve o arquivo.
Aqui o navegador.título é usado para acessar o título da página visitada e o impressão() 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, por fim, feche o navegador
Como você pode ver, o ex04.py o script imprimiu bem o título da página da web no console.
$ python3 ex04.py
Exemplo 2: impressão de 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:
from selenium import webdriverde selênio.driver da web.comum.chaves importar chaves
navegador = webdriver.Firefox (executable_path = "./ drivers / geckodriver ")
urls = ['https: // www.duckduckgo.com ',' https: // linuxhint.com ',' https: // yahoo.com ']
para url em urls:
navegador.obter (url)
imprimir ("Título:% s"% navegador.título)
navegador.Sair()
Quando terminar, salve o script Python ex05.py.
Aqui o urls lista mantém o URL de cada página da web.
UMA para loop é usado para iterar através do urls lista de itens.
Em cada iteração, o Selenium diz ao navegador para visitar o url e obter o título da página da web. Depois que o Selenium extrai 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 Selenium pode realizar a mesma tarefa com várias páginas da web ou sites.
Exemplo 3: Extraindo dados de uma página da web
Neste exemplo, vou mostrar os fundamentos da extração de dados de páginas da web usando Selenium. Isso também é conhecido como web scraping.
Primeiro, visite o Random.link org do Firefox. A página deve gerar uma string aleatória, como você pode ver na imagem abaixo.
Para extrair os dados de string aleatórios usando Selenium, você também deve saber a representação HTML dos dados.
Para ver como os dados da string aleatória são representados em HTML, selecione os dados da string aleatória e pressione o botão direito do mouse (RMB) e clique em Inspecionar elemento (Q), conforme notado na imagem 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 Ícone de inspeção ( ) para inspecionar os dados da página.
Clique no ícone de inspeção () e passe o mouse sobre os dados de string aleatórios que você deseja extrair. A representação HTML dos dados deve ser exibida como antes.
Como você pode ver, os dados de string aleatórios são agrupados em um HTML pré tag e contém a classe dados.
Agora que sabemos a representação HTML dos dados que queremos extrair, criaremos um script Python para extrair os dados usando Selenium.
Crie o novo script Python ex06.py e digite as seguintes linhas de códigos no script
from selenium import webdriverde selênio.driver da web.comum.chaves importar chaves
navegador = webdriver.Firefox (executable_path = "./ drivers / geckodriver ")
navegador.get ("https: // www.aleatória.org / strings /?num = 1 & len = 20 & dígitos
= on & upperalpha = on & loweralpha = on & unique = on & format = html & rnd = new ")
dataElement = navegador.find_element_by_css_selector ('pré.dados')
imprimir (dataElement.texto)
navegador.Sair()
Quando terminar, salve o ex06.py Script Python.
Aqui o navegador.obter() 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 em busca de um elemento específico e o retorna.
Nesse caso, o elemento seria pré.dados, a 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 do texto do selecionado pré.dados elemento.
Se você executar o ex06.py Script Python, ele deve extrair os dados de string aleatórios da página da web, como você pode ver na captura de tela abaixo.
$ python3 ex06.py
Como você pode ver, cada vez que executo o ex06.py Script Python, ele extrai dados de string aleatórios diferentes da página da web.
Exemplo 4: Extraindo uma 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 Selenium. Neste exemplo, vou mostrar como usar o Selenium para extrair uma lista de dados de uma página da web.
Primeiro, visite o gerador de nomes aleatórios.informações do navegador Firefox. Este site irá gerar dez 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.
Se você inspecionar a lista de nomes mais de perto, 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.
from selenium import webdriverde selênio.driver da web.comum.chaves importar chaves
navegador = webdriver.Firefox (executable_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.Sair()
Quando terminar, salve o ex07.py Script Python.
Aqui o navegador.obter() método carrega a página da web do gerador de nome aleatório no navegador Firefox.
O navegador.find_elements_by_css_selector () método usa o seletor CSS ol.nameList li para encontrar tudo li elementos dentro do ol tag com o nome da classe lista de nomes. Eu armazenei todos os selecionados li elementos no lista de nomes variável.
UMA 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.
Se você executar o ex07.py O script Python irá buscar todos os nomes aleatórios da página da web e imprimi-los na tela, como você pode ver na imagem abaixo.
$ python3 ex07.py
Se você executar o script uma segunda vez, ele deve retornar uma nova lista de nomes de usuários aleatórios, como você pode ver na imagem abaixo.
Exemplo 5: Enviando formulário - Pesquisando no DuckDuckGo
Este exemplo é tão simples quanto o primeiro exemplo. Neste exemplo, vou visitar o mecanismo de pesquisa DuckDuckGo e pesquisar o termo selênio hq usando selênio.
Primeiro, visite DuckDuckGo Search Engine no navegador Firefox.
Se você inspecionar o campo de entrada de pesquisa, ele deve ter o id search_form_input_homepage, como você pode ver na imagem abaixo.
Agora, crie o novo script Python ex08.py e digite as seguintes linhas de códigos no script.
from selenium import webdriverde selênio.driver da web.comum.chaves importar chaves
navegador = webdriver.Firefox (executable_path = "./ drivers / geckodriver ")
navegador.get ("https: // duckduckgo.com / ")
searchInput = navegador.find_element_by_id ('search_form_input_homepage')
searchInput.send_keys ('selenium hq' + Chaves.ENTRAR)
Quando terminar, salve o ex08.py Script Python.
Aqui o navegador.obter() método carrega a página inicial do mecanismo de pesquisa DuckDuckGo no navegador Firefox.
O navegador.find_element_by_id () método seleciona o elemento de entrada com o id search_form_input_homepage e armazena-o no searchInput variável.
O searchInput.send_keys () método é usado para enviar dados de pressionamento de tecla para o campo de entrada. Neste exemplo, ele envia a string selênio hq, e a tecla Enter é pressionada usando o Chaves.ENTRAR constante.
Assim que o mecanismo de pesquisa DuckDuckGo receber a tecla Enter (Chaves.ENTRAR), ele pesquisa e exibe o resultado.
Execute o ex08.py Script Python, da seguinte maneira:
$ python3 ex08.py
Como você pode ver, o navegador Firefox visitou o mecanismo de busca DuckDuckGo.
Digitou automaticamente selênio hq na caixa de texto de pesquisa.
Assim que o navegador recebeu a tecla Enter, pressione (Chaves.ENTRAR), 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 DuckDuckGo foi fácil. Tudo que você precisava fazer era pressionar a tecla Enter. Mas este não será o caso para todos os envios de formulários. Neste exemplo, vou mostrar um tratamento de formulário mais complexo.
Primeiro, visite a página de formulários HTML de W3Schools.com do navegador Firefox. Assim que a página carregar, você deverá ver um formulário de exemplo. Este é o formulário que enviaremos neste exemplo.
Se você inspecionar o formulário, o Primeiro nome campo de entrada deve ter o id fname, a Sobrenome campo de entrada deve ter o id nome, e a Botão de envio deveria ter o modelo enviar, como você pode ver na imagem abaixo.
Para enviar este formulário usando Selenium, crie o novo script Python ex09.py e digite as seguintes linhas de códigos no script.
from selenium import webdriverde selênio.driver da web.comum.chaves importar chaves
navegador = webdriver.Firefox (executable_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 ('nome')
nome.Claro()
nome.send_keys ('Shovon')
submitButton = navegador.find_element_by_css_selector ('input [type = "submit"]')
botão de envio.send_keys (chaves.ENTRAR)
Quando terminar, salve o ex09.py Script Python.
Aqui o navegador.obter() método abre a página de formulários HTML W3schools no navegador Firefox.
O navegador.find_element_by_id () método encontra os campos de entrada pelo id fname e nome e os armazena no fname e nome variáveis, respectivamente.
O fname.Claro() e nome.Claro() métodos limpam o nome padrão (John) fname valor e sobrenome (Doe) nome valor dos campos de entrada.
O fname.send_keys () e nome.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 () método seleciona o Botão de envio do formulário e armazena-o no botão de envio variável.
O botão de envio.send_keys () método envia o pressionamento da tecla Enter (Chaves.ENTRAR) para o Botão de envio do formulário. Esta ação envia o formulário.
Execute o ex09.py Script Python, da seguinte maneira:
$ 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 a testar o navegador Selenium, automação da web e bibliotecas de scrapping da web em Python 3. Para obter mais informações, verifique a documentação oficial do Selenium Python.