2012-01-17 17 views
37

Al tomar una captura de pantalla usando Selenium Webdriver en Windows con python, la captura de pantalla se guarda directamente en la ruta del programa, ¿hay alguna manera de guardar el archivo .png en un directorio específico?Webdriver Screenshot

Respuesta

53

Uso driver.save_screenshot('/path/to/file') o driver.get_screenshot_as_file('/path/to/file'):

import selenium.webdriver as webdriver 
import contextlib 

@contextlib.contextmanager 
def quitting(thing): 
    yield thing 
    thing.quit() 

with quitting(webdriver.Firefox()) as driver: 
    driver.implicitly_wait(10) 
    driver.get('http://www.google.com') 
    driver.get_screenshot_as_file('/tmp/google.png') 
    # driver.save_screenshot('/tmp/google.png') 
-6

entiendo que busca una respuesta en Python, pero aquí es cómo se podría hacerlo en rubí ..

http://watirwebdriver.com/screenshots/

Si eso solo funciona guardando solo en el directorio actual. Primero asignaría la imagen a una variable y luego guardaría esa variable en el disco como un archivo PNG.

por ejemplo:

image = b.screenshot.png 

File.open("testfile.png", "w") do |file| 
    file.puts "#{image}" 
end 

donde b es la variable de navegador utilizado por WebDriver. Tengo la flexibilidad de proporcionar una ruta absoluta o relativa en "File.open" para que pueda guardar la imagen en cualquier lugar.

7

sí, tenemos una manera de conseguir la extensión de la pantalla .png usando pitón WebDriver

utilizar por debajo de código si trabaja en webriver.it Python es muy simple.

driver.save_screenshot('D\folder\filename.png') 
17

Inspirado en este hilo (misma pregunta para Java): Take a screenshot with Selenium WebDriver

from selenium import webdriver 

browser = webdriver.Firefox() 
browser.get('http://www.google.com/') 
browser.save_screenshot('screenie.png') 
browser.quit() 
3

Claro que no es real en este momento pero se enfrentó a este problema también, y mi manera: Parece que 'save_screenshot' Tengo algunos problemas para crear archivos con espacio en el nombre al mismo tiempo que agregué la aleatorización a los nombres de archivo para evitar el reemplazo.

Aquí tiene método para limpiar mi nombre de espacios en blanco (How do I replace whitespaces with underscore and vice versa?):

def urlify(self, s): 
    # Remove all non-word characters (everything except numbers and letters) 
    s = re.sub(r"[^\w\s]", '', s) 
    # Replace all runs of whitespace with a single dash 
    s = re.sub(r"\s+", '-', s) 
    return s 

continuación

driver.save_screenshot('c:\\pytest_screenshots\\%s' % screen_name) 

donde

def datetime_now(prefix): 
    symbols = str(datetime.datetime.now()) 
    return prefix + "-" + "".join(symbols) 

screen_name = self.urlify(datetime_now('screen')) + '.png' 
1
driver.save_screenshot("path to save \\screen.jpeg") 
0

Usted puede utilizar a continuación la función de relativo ruta como ruta absoluta no es una buena idea añadir en escritura

importación

import sys, os 

Use el código de la siguiente manera:

ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) 
screenshotpath = os.path.join(os.path.sep, ROOT_DIR,'Screenshots'+ os.sep) 
driver.get_screenshot_as_file(screenshotpath+"testPngFunction.png") 

asegúrese de crear la carpeta en la que está presente el archivo .py .

os.path.join también le impiden ejecutar su secuencia de comandos en multiplataforma como: UNIX y Windows. Generará un separador de ruta según el sistema operativo en tiempo de ejecución. os.sep es similar a File.separtor en java

Cuestiones relacionadas