2012-03-19 16 views
11

Esta pregunta describe mi conclusión después de investigar las opciones disponibles para crear una instancia de Chrome sin cabeza en Python y solicita confirmación o recursos que describen una "mejor manera".Crear una instancia de Chrome sin cabeza en Python

Por lo que he visto, parece que la forma más rápida de comenzar con una instancia sin cabeza de Chrome en una aplicación de Python es usar CEF (http://code.google.com/p/chromiumembedded/) con CEFPython (http://code.google.com/p/cefpython/). Sin embargo, CEFPython parece prematuro, por lo que usarlo significaría una mayor personalización antes de poder cargar una instancia de Chrome sin cabeza que carga páginas web (y archivos necesarios), resuelve un DOM completado y luego me permite ejecutar JS arbitrario contra él desde Python.

¿Me he perdido algún otro proyecto que sea más maduro o que me lo haga más fácil?

+0

¿Qué plataforma? – Marcin

+0

¿Por qué específicamente necesitas una instancia de Chrome sin cabeza? –

+0

@Marcin, estoy desarrollando en Windows 7 pero publicaré la aplicación como un sitio web en Ubuntu. – Trindaz

Respuesta

9

¿Alguna razón por la que no ha considerado Selenium con el controlador de Chrome?

http://code.google.com/p/selenium/wiki/ChromeDriver

http://code.google.com/p/selenium/wiki/PythonBindings

+1

Combinado con http://www.youtube.com/watch?v=DL7gyuqkzzU, esto me da exactamente lo que necesito – Trindaz

+2

Para resumir el youtube, necesitas: " de pyvirtualdisplay import Pantalla; display = Pantalla (visible = 0, tamaño = (1024, 768)); display.start() " – spookylukey

0

casperjs es un webkit sin cabeza, pero no le daría de Python, que yo sepa; parece orientarse en línea de comandos, pero eso no significa que no puedas ejecutarlo desde Python de tal forma que satisfaga lo que estás buscando. Cuando ejecuta casperjs, proporciona una ruta al javascript que desea ejecutar; entonces necesitarías emitir eso desde Python.

Pero aparte de eso, aparezco casperjs porque parece satisfacer muy bien el requisito ligero y sin cabeza.

+0

Casperjs es un marco de prueba para PhantomJS, que es un QtWebkit sin cabeza. Le permite comunicarse a través de la API REST. –

+0

Vaya ... Eso es correcto. – sethcall

2

Mientras que yo soy el autor de CasperJS, invito a que veas Ghost.py, un cliente web WebKit escrito en Python.

Aunque está muy inspirado en CasperJS, no se basa en PhantomJS, aunque todavía usa enlaces PyQt y Webkit.

+1

CasperJS se ve * impresionante * – Trindaz

0

Lo utilizo para obtener el controlador:

def get_browser(storage_dir, headless=False): 
    """ 
    Get the browser (a "driver"). 

    Parameters 
    ---------- 
    storage_dir : str 
    headless : bool 

    Results 
    ------- 
    browser : selenium webdriver object 
    """ 
    # find the path with 'which chromedriver' 
    path_to_chromedriver = '/usr/local/bin/chromedriver' 

    from selenium.webdriver.chrome.options import Options 
    chrome_options = Options() 
    if headless: 
     chrome_options.add_argument("--headless") 
    chrome_options.add_experimental_option('prefs', { 
     "plugins.plugins_list": [{"enabled": False, 
            "name": "Chrome PDF Viewer"}], 
     "download": { 
      "prompt_for_download": False, 
      "default_directory": storage_dir, 
      "directory_upgrade": False, 
      "open_pdf_in_system_reader": False 
     } 
    }) 

    browser = webdriver.Chrome(path_to_chromedriver, 
           chrome_options=chrome_options) 
    return browser 

Al cambiar el parámetro headless podrá ver la o no.

7

Esta pregunta es de 5 años de edad, ahora y en el momento en que fue un gran reto para ejecutar un cromo sin cabeza usando Python, pero bueno es:

partir de la versión 59, publicado en junio de 2017, Chrome viene con un controlador sin cabeza, lo que significa que podemos usarlo en un entorno de servidor no gráfico y ejecutar pruebas sin tener páginas visualizadas, etc. lo que ahorra mucho tiempo y memoria para pruebas o raspado. Ajuste de selenio para la que es muy fácil:

(supongo que ha instalado el selenio y el controlador de cromo):

from selenium import webdriver 

#set a headless browser 
options = webdriver.ChromeOptions() 
options.add_argument('headless') 
browser = webdriver.Chrome(chrome_options=options) 

y ahora su Chrome ejecutará headlessly, si usted saca las opciones de la última línea, te mostrará el navegador.

+0

¡Gracias por esto! Esto funcionó perfectamente! – M4cJunk13

Cuestiones relacionadas