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")