Configurar selenium con el controlador Chrome en ubuntu/debian
- Configurar y ejecutar Chrome y Selenium en Ubuntu o Debian
- La guía está basada en ubuntu 22.04.
- Última modificación: 4 de junio de 2024
# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS"
Tabla de contenido
- Paso 1: actualice todos los paquetes, si es necesario
- Paso 2: descargue el paquete estable de Google Chrome
- Paso 3: Instale Google Chrome
- (Opcional) Si tiene un problema de dependencia después del paso 3, ejecute el siguiente comando y vuelva a intentarlo en el paso 3.
- Paso 4: Verifique la versión instalada de Google Chrome
- Paso 5: instale selenium, webdriver-manager
- Paso 6: crea hello_world
- Paso 7: Ejecute test.py y verifique que Google-Chrome esté disponible
- Paso 8: Eso es todo. Disfrútala.:)
- Preguntas frecuentes :)
- 1. Mi VM se ejecuta en un entorno de nube. En este caso, ¿cómo debo utilizar Chrome?
- 2. Escribí un script de Python usando Chrome y Selenium y lo programé con crontab, pero cron no funciona correctamente. ¿Qué tengo que hacer?
- 3. El motivo de las diferentes formas de cargar ChromeDriver es el siguiente, por ejemplo, ¿cuáles son las diferencias entre (1) y (2)?
- 4. Se ha actualizado Google Chrome. ¿Dónde puedo descargar ChromeDriver y cómo lo instalo?
- 4.1. Vaya a la página de descarga del controlador de Chrome.
- 4.2. Descargue el controlador Chrome.
- 4.3. Instale el controlador Chrome.
- 4.4. Uso de ejemplo en Python:
- 5. ¿Cómo puedo evitar que el paquete google-chrome se actualice automáticamente en Ubuntu?
Paso 1: actualice todos los paquetes, si es necesario
# apt update
# apt upgrade
Paso 2: descargue el paquete estable 'google-chrome'
# wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
Paso 3: Instale 'google-chrome'
# apt-get install -y ./google-chrome-stable_current_amd64.deb
Paso 4: Verifique la versión instalada de 'google-chrome'
# google-chrome --version
Google Chrome 123.0.6312.86
Paso 5: instale selenium, webdriver-manager
- https://pypi.org/project/webdriver-manager/
# pip3 install selenium
# pip3 install webdriver-manager
Paso 6: crea hello_world
- Ejecutar con Chrome sin cabeza
# 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 ()
- Ejecutar con la GUI de 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 ()
Paso 7: Ejecute test.py y verifique que 'google-chrome' esté disponible
# python3 test.py
Welcome to Python.org
Paso 8: Eso es todo. Disfrútala:)
Preguntas frecuentes :)
1. Mi VM se ejecuta en un entorno de nube. En este caso, ¿cómo debo utilizar Chrome?
- En un entorno de nube, la gente suele utilizar Chrome en modo sin cabeza.
- En otras palabras, en un entorno de nube, es posible que las máquinas virtuales no admitan el modo de visualización, especialmente las máquinas virtuales gratuitas (niveles gratuitos).
- Sin embargo, si sus máquinas virtuales admiten X-Windows o pantalla, también puede usar el modo GUI
2. Escribí un script de Python usando Chrome y Selenium y lo programé con crontab, pero cron no funciona correctamente. ¿Qué tengo que hacer?
- En muchos de los resultados de búsqueda parece que necesita especificar el modo de visualización como 0 en su secuencia de comandos cuando lo ejecuta a través de cron.
- Como esto:)
*/1 * * * * export DISPLAY=:0; python ~/selenium_script.py
- Sin embargo, las máquinas virtuales típicas que ejecutan Chrome se ejecutan en modo sin cabeza, donde la configuración de pantalla no es relevante.
- El problema puede ser que cuando se ejecuta cronjob, cron no tiene la ruta del controlador chrome en la ruta del cron.
- por lo que debe especificar la ruta del controlador Chrome en cron o en su iniciador (script).
- Si no conoce la ruta a Chromedriver, puede encontrarla usando el siguiente comando (o configurando el 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
- Luego, puedes establecer la ruta en crontab y ejecutarla, así :)
*/05 * * * * export PATH=$PATH:/root/.wdm/drivers/chromedriver/linux64/117.0.5938.92/chromedriver-linux64/chromedriver; root /data/test.py
O puede crear un script Bash que cargue el script Python y especifique la ruta:
# 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. El motivo de las diferentes formas de cargar ChromeDriver es el siguiente, por ejemplo, ¿cuáles son las diferencias entre (1) y (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) Carga chromedriver usando el controlador web de Selenium. En este caso, debe descargar el binario chromedriver, descomprimirlo en algún lugar de su PC y establecer la ruta a este controlador (compatible con Selenium 4.x y versiones anteriores).
- (2) Ejecuta Chrome usando webdriver-manager. Cuando utiliza el paquete webdriver-manager, no es necesario descargar el binario chromedriver por separado.
Administrador de instalación:
pip install webdriver-manager
Usar con Chrome
selenio 3
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
selenio 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 obtener más detalles, consulte https://pypi.org/project/webdriver-manager/.
4. Se ha actualizado Google Chrome. ¿Dónde puedo descargar ChromeDriver y cómo lo instalo?
- 4 de junio de 2024 la última versión de Chrome es " 125.0.6422.142 "
4.1. Vaya a la página de descarga de ChromeDriver.
- Descargue el controlador de Chrome con la misma versión que su Chrome actualizado.
- Haga clic en el enlace en el panel de disponibilidad de Chrome para pruebas: https://chromedriver.chromium.org/downloads
- https://googlechromelabs.github.io/chrome-for-testing/ para encontrar el controlador de Chrome que coincida con su versión actualizada de Chrome.
4.2. Descargue el controlador Chrome.
- Descargue la versión del controlador Chrome que coincida con su 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 el controlador Chrome.
- Dado que Chrome Driver es un archivo binario, no existe un proceso de instalación por separado.
- Extraiga el archivo zip y copie el archivo chromedriver en el directorio donde debería ubicarse el controlador Chrome.
Para Mac, la ubicación predeterminada para chromedriver es /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
Si desea colocarlo en un directorio personalizado:
- Coloque el archivo 'chromedriver' en la ubicación deseada. Por ejemplo: '/Usuarios/mymac/data/chromedrv/chromedriver'.
4.4. Uso de ejemplo en 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. ¿Cómo puedo evitar que el paquete 'google-chrome' se actualice automáticamente en Ubuntu?
- Para evitar que Google Chrome se actualice automáticamente en Ubuntu, puede utilizar la fijación de paquetes o apt-mark para conservar el paquete de Chrome. Sin embargo, esto generalmente no se recomienda.
- Tenga en cuenta que desactivar las actualizaciones automáticas de Chrome puede comprometer la seguridad. Generalmente se recomienda administrar las actualizaciones adecuadamente para obtener beneficios de seguridad y funcionalidad.
Usando marca apta:
- Mantenga el paquete para evitar actualizaciones:
# apt-mark hold google-chrome-stable
google-chrome-stable set on hold.
- Para permitir actualizaciones nuevamente, libere la retención:
# apt-mark unhold google-chrome-stable
Canceled hold on google-chrome-stable.