Configure o selenium com driver chrome no ubuntu/debian
- Configurando e executando Chrome e Selenium no Ubuntu ou Debian
- O guia é baseado no Ubuntu 22.04
- Última modificação: 4 de junho de 2024
# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS"
Índice
- Etapa 1: atualize todos os pacotes, se necessário
- Etapa 2: Baixe o pacote estável do Google Chrome
- Passo 3: Instale o Google Chrome
- (Opcional) Se você tiver um problema de dependência após a etapa 3, execute o seguinte comando e tente novamente na etapa 3
- Etapa 4: verifique a versão instalada do Google Chrome
- Etapa 5: Instale o selênio, gerenciador de webdriver
- Etapa 6: crie hello_world
- Etapa 7: execute test.py e verifique se o Google Chrome está disponível
- Etapa 8: isso é tudo. Apreciá-lo.:)
- PERGUNTAS FREQUENTES :)
- 1. Minha VM está sendo executada em um ambiente de nuvem. Neste caso, como devo usar o Chrome?
- 2. Escrevi um script Python usando Chrome e Selenium e agendei-o com crontab, mas o cron não está funcionando corretamente. O que devo fazer?
- 3. O motivo das diferentes formas de carregar o ChromeDriver é o seguinte, por exemplo, quais são as diferenças entre (1) e (2)?
- 4. O Google Chrome foi atualizado. Onde posso baixar o ChromeDriver e como faço para instalá-lo?
- 4.1. Vá para a página de download do driver do Chrome.
- 4.2. Baixe o ChromeDriver.
- 4.3. Instale o ChromeDriver.
- 4.4. Exemplo de uso em Python:
- 5. Como posso evitar que o pacote google-chrome seja atualizado automaticamente no Ubuntu?
Etapa 1: atualize todos os pacotes, se necessário
# apt update
# apt upgrade
Etapa 2: Baixe o pacote estável ‘google-chrome’
# wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
Etapa 3: instale o ‘google-chrome’
# apt-get install -y ./google-chrome-stable_current_amd64.deb
Etapa 4: verifique a versão instalada do ‘google-chrome’
# google-chrome --version
Google Chrome 123.0.6312.86
Etapa 5: Instale o selênio, gerenciador de webdriver
- https://pypi.org/project/webdriver-manager/
# pip3 install selenium
# pip3 install webdriver-manager
Etapa 6: crie hello_world
- Execute com o Chrome sem cabeça
# vim test.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
options = Options ()
options.add_argument( ' --headless ' )
options.add_argument( ' --no-sandbox ' )
options.add_argument( ' --disable-dev-shm-usage ' )
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.get( " https://python.org " )
print(driver.title)
driver.close ()
- Execute com a GUI do Chrome
# vim test.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
options = Options ()
# options.add_argument('--headless')
# options.add_argument('--no-sandbox')
options.add_argument( ' --disable-dev-shm-usage ' )
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.get( " https://python.org " )
print(driver.title)
driver.close ()
Etapa 7: execute test.py e verifique se 'google-chrome' está disponível
# python3 test.py
Welcome to Python.org
Etapa 8: isso é tudo. Apreciá-lo:)
PERGUNTAS FREQUENTES :)
1. Minha VM está sendo executada em um ambiente de nuvem. Neste caso, como devo usar o Chrome?
- Em um ambiente de nuvem, as pessoas geralmente usam o Chrome no modo headless.
- Em outras palavras, em um ambiente de nuvem, as VMs podem não suportar o modo de exibição, especialmente as VMs gratuitas (níveis gratuitos).
- No entanto, se suas VMs suportarem X-windows ou display, você também poderá usar o modo GUI
2. Escrevi um script Python usando Chrome e Selenium e agendei-o com crontab, mas o cron não está funcionando corretamente. O que devo fazer?
- em muitos resultados de pesquisa, parece que você precisa especificar o modo de exibição como 0 em seu script ao executá-lo por meio do cron.
- Assim:)
*/1 * * * * export DISPLAY=:0; python ~/selenium_script.py
- No entanto, as VMs típicas que executam o Chrome são executadas no modo headless, onde as configurações de exibição não são relevantes.
- O problema pode ser que, ao executar o cronjob, o cron não tenha o caminho do chromedriver no caminho do cron.
- então você deve especificar o caminho do chromedriver no cron ou no seu inicializador (script).
- Se você não souber o caminho para o chromedriver, poderá encontrá-lo usando o seguinte comando (ou configurando o modo WDM_LOG):
# find / -name "chromedriver"
/root/.cache/selenium/chromedriver
/root/.cache/selenium/chromedriver/linux64/117.0.5938.92/chromedriver
/root/.wdm/drivers/chromedriver
/root/.wdm/drivers/chromedriver/linux64/117.0.5938.92/chromedriver-linux64/chromedriver
- Depois, você pode definir o caminho no crontab e executá-lo, assim :)
*/05 * * * * export PATH=$PATH:/root/.wdm/drivers/chromedriver/linux64/117.0.5938.92/chromedriver-linux64/chromedriver; root /data/test.py
Ou você pode criar um script Bash que carregue o script Python e especifique o caminho:
# vim test_loader.sh
#!/bin/bash
export PATH=$PATH:/root/.wdm/drivers/chromedriver/linux64/117.0.5938.92/chromedriver-linux64/chromedriver
...
...
python3 test.py
3. O motivo das diferentes formas de carregar o ChromeDriver é o seguinte, por exemplo, quais são as diferenças entre (1) e (2)?
(1)
from selenium import webdriver
driver = webdriver.Chrome('/home/user/drivers/chromedriver')
(2)
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
- (1) Carrega o chromedriver usando o webdriver do Selenium. Neste caso, você precisa baixar o binário chromedriver, descompactá-lo em algum lugar do seu PC e definir o caminho para este driver. (Compatível com Selenium 4.xe abaixo).
- (2) Executa o Chrome usando o webdriver-manager. Ao usar o pacote webdriver-manager, não há necessidade de baixar o binário chromedriver separadamente.
Gerenciador de instalação:
pip install webdriver-manager
Usar com o Chrome
selênio 3
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
selênio 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
- Para obter mais detalhes, consulte https://pypi.org/project/webdriver-manager/.
4. O Google Chrome foi atualizado. Onde posso baixar o ChromeDriver e como faço para instalá-lo?
- 4 de junho de 2024, a versão mais recente do Chrome é " 125.0.6422.142 "
4.1. Vá para a página de download do ChromeDriver.
- Baixe o driver do Chrome com a mesma versão do Chrome atualizado.
- Clique no link no painel de disponibilidade do Chrome for Testing: https://chromedriver.chromium.org/downloads
- https://googlechromelabs.github.io/chrome-for-testing/ para encontrar o driver do Chrome correspondente à sua versão atualizada do Chrome.
4.2. Baixe o ChromeDriver.
- Baixe a versão do driver do Chrome que corresponde ao seu Chrome.
- https://googlechromelabs.github.io/chrome-for-testing/
For Mac M1, download mac-arm64.
- For Chrome version: https://storage.googleapis.com/chrome-for-testing-public/125.0.6422.141/mac-arm64/chromedriver-mac-arm64.zip
For General Linux distributions, download linux64.
- For Chrome version: https://storage.googleapis.com/chrome-for-testing-public/125.0.6422.141/linux64/chromedriver-linux64.zip
4.3. Instale o ChromeDriver.
- Como o driver do Chrome é um arquivo binário, não há um processo de instalação separado.
- Extraia o arquivo zip e copie o arquivo chromedriver para o diretório onde o driver do Chrome deve estar localizado.
Para Mac, o local padrão para chromedriver é /usr/local/bin.
% sw_vers
ProductName: macOS
ProductVersion: 13.0
BuildVersion: 22A380
% ls -al /usr/local/bin/chromedriver
-rwxr-xr-x 1 root wheel 17314928 Mar 25 13:23 /usr/local/bin/chromedriver
Se você quiser colocá-lo em um diretório personalizado:
- Coloque o arquivo ‘chromedriver’ no local desejado. Por exemplo: '/Users/mymac/data/chromedrv/chromedriver'.
4.4. Exemplo de uso em Python:
from selenium import webdriver
from selenium . webdriver . chrome . service import Service
def chrome_webdriver ():
chromedriver_path = '/Users/mymac/data/chromedrv/chromedriver'
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/123.0.0.0 Safari/537.36'
options = webdriver . ChromeOptions ()
options . add_argument ( "--start-maximized" )
options . add_argument ( '--headless' )
options . add_argument ( f'user-agent= { user_agent } ' )
service = Service ( executable_path = chromedriver_path )
driver = webdriver . Chrome ( service = service , options = options )
return driver
url = 'http://www.google.com'
driver = chrome_webdriver ()
driver . get ( url )
driver . implicitly_wait ( 10 )
print ( driver . page_source )
5. Como posso evitar que o pacote 'google-chrome' seja atualizado automaticamente no Ubuntu?
- Para evitar que o Google Chrome seja atualizado automaticamente no Ubuntu, você pode usar a fixação de pacotes ou apt-mark para manter o pacote do Chrome. No entanto, isso geralmente não é recomendado
- Lembre-se de que desativar as atualizações automáticas do Chrome pode comprometer a segurança. Geralmente, é recomendado gerenciar as atualizações adequadamente para obter benefícios de segurança e funcionalidade.
Usando apt-mark:
- Segure o pacote para evitar atualizações:
# apt-mark hold google-chrome-stable
google-chrome-stable set on hold.
- Para permitir atualizações novamente, libere a retenção:
# apt-mark unhold google-chrome-stable
Canceled hold on google-chrome-stable.