Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

130
Vistas
Firefox con Selenium (sin cabeza)

¿Cómo usar selenium con firefox para raspar sitios web?

Instalar Firefox, xvfb, selenio

 echo "deb http://packages.linuxmint.com debian import" >> /etc/apt/sources.list && apt-get update apt-get install firefox xvfb python-dev python-pip pip install pyvirtualdisplay selenium

selenium_scrape.py

 from pyvirtualdisplay import Display import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException display = Display(visible=0, size=(800, 600)) display.start() def init_driver(): driver = webdriver.Firefox() driver.wait = WebDriverWait(driver, 5) return driver def lookup(driver, query): driver.get("http://www.google.com") try: box = driver.wait.until(EC.presence_of_element_located( (By.NAME, "q"))) button = driver.wait.until(EC.element_to_be_clickable( (By.NAME, "btnK"))) box.send_keys(query) button.click() except TimeoutException: print("Box or Button not found in google.com") if __name__ == "__main__": driver = init_driver() lookup(driver, "Selenium") time.sleep(5) driver.quit() display.stop()

Error

 File "selenium_scrape.py", line 20 box = driver.wait.until(EC.presence_of_element_located( ^ IndentationError: expected an indented block
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

La diferencia es que no puede usar un navegador Chrome empaquetado; necesita un controlador especial... chromedriver.

Obtenga la última versión actual aquí: Chromedriver

Ahora tiene 2 opciones, ya sea mover el chromedriver descargado para que siempre esté accesible (opción 1), o definir en su secuencia de comandos cómo acceder a él.

Opción 1: muévelo a la ruta

Luego muévalo para que sea accesible cuando use webdriver.Chrome() :

 sudo mv /path/to/download/chromedriver /usr/bin

También configúrelo para que se permita su ejecución:

 chmod a+x /usr/binchromedriver

Opción 2: no moverlo a la ruta

O puede definir una ruta

 import os chr = "/Users/you/Downloads/chromedriver" os.environ["webdriver.chrome.driver"] = chr driver = webdriver.Chrome(chromedriver)
over 4 years ago · Santiago Trujillo Denunciar

0

(Nota: la pregunta original era sobre Chrome, por lo que mi respuesta es sobre Chrome, no sobre Firefox).

Para mí, funciona si simplemente extraigo el controlador de cromo en la misma carpeta donde está el script.

Entonces lo ejecuto así

 Xvfb :99 -ac -screen 0 1280x1024x16 & echo 'Starting the test' PATH=$PATH:. python selenimum_scrape.py

Esto iniciará Xvfb e incluirá cromedriver en PATH .

Y la versión modificada de tu que me funciona:

 import os import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException # comment this out to run on the real display os.environ['DISPLAY'] = ':99' def init_driver(): driver = webdriver.Chrome() driver.wait = WebDriverWait(driver, 5) return driver def lookup(driver, query): driver.get("http://www.google.com") try: box = driver.wait.until(EC.presence_of_element_located( (By.NAME, "q"))) # once we type the query, this button disappears # button = driver.wait.until(EC.element_to_be_clickable( # (By.NAME, "btnK"))) box.send_keys(query) button = driver.wait.until(EC.element_to_be_clickable( (By.NAME, "btnG"))) button.click() except TimeoutException: print("Box or Button not found in google.com") if __name__ == "__main__": driver = init_driver() lookup(driver, "Selenium") time.sleep(5) driver.quit()
over 4 years ago · Santiago Trujillo Denunciar

0

La pregunta es (por el momento) sobre un error de sangría. Esto se puede arreglar fácilmente:

 def lookup(driver, query): driver.get("http://www.google.com") try: box = driver.wait.until(EC.presence_of_element_located( (By.NAME, "q"))) button = driver.wait.until(EC.element_to_be_clickable( (By.NAME, "btnK"))) box.send_keys(query) button.click() except TimeoutException: print("Box or Button not found in google.com")
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda