takesscreenshot save_screenshot python selenium selenium-webdriver webdriver

python - save_screenshot - Captura de pantalla de Webdriver



selenium take screenshot java (9)

Al tomar una captura de pantalla con 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?


Aquí hicieron una pregunta similar, y la respuesta parece más completa, dejo la fuente:

¿Cómo tomar una captura de pantalla parcial con Selenium WebDriver en python?

from selenium import webdriver from PIL import Image from io import BytesIO fox = webdriver.Firefox() fox.get(''http://.com/'') # now that we have the preliminary stuff out of the way time to get that image :D element = fox.find_element_by_id(''hlogo'') # find part of the page you want image of location = element.location size = element.size png = fox.get_screenshot_as_png() # saves screenshot of entire page fox.quit() im = Image.open(BytesIO(png)) # uses PIL library to open image in memory left = location[''x''] top = location[''y''] right = location[''x''] + size[''width''] bottom = location[''y''] + size[''height''] im = im.crop((left, top, right, bottom)) # defines crop points im.save(''screenshot.png'') # saves new cropped image


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

Aquí obtuve un método para limpiar mi nombre de archivo de espacios en blanco ( ¿Cómo puedo reemplazar espacios en blanco con guión bajo y viceversa? ):

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

entonces

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

dónde

def datetime_now(prefix): symbols = str(datetime.datetime.now()) return prefix + "-" + "".join(symbols) screen_name = self.urlify(datetime_now(''screen'')) + ''.png''


Entiendo que estás buscando una respuesta en Python, pero así es como uno lo haría en ruby ​​...

http://watirwebdriver.com/screenshots/

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

p.ej:

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

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


Esto tomará una captura de pantalla y lo colocará en un directorio de un nombre elegido.

import os driver.save_screenshot(os.path.join(os.path.dirname(os.path.realpath(__file__)), ''NameOfScreenShotDirectory'', ''PutFileNameHere''))


Inspirado en este hilo (la misma pregunta para Java): tome una captura de pantalla con Selenium WebDriver

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


Puede utilizar la función siguiente para la ruta relativa ya que la ruta absoluta no es una buena idea para agregar en la secuencia de comandos

Importar

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 donde está presente el archivo .py.

os.path.join también le impide 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


Sí, tenemos una forma de obtener la extensión de captura de pantalla de .png usando python webdriver

use el siguiente código si trabaja en python webriver.it es muy simple.

driver.save_screenshot(''D/folder/filename.png'')


Utilice 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'')


driver.save_screenshot("path to save //screen.jpeg")