web-dev-qa-db-fra.com

Capture d'écran Webdriver

Lorsque vous prenez une capture d'écran à l'aide de Selenium Webdriver sur des fenêtres avec python, la capture d'écran est enregistrée directement dans le chemin du programme, existe-t-il un moyen d'enregistrer le fichier .png dans un répertoire spécifique?

47
user1152578

Utilisez driver.save_screenshot('/path/to/file') ou 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')
66
unutbu

Inspiré de ce fil (même question pour Java): Prendre une capture d'écran avec Selenium WebDriver

from Selenium import webdriver

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

Oui, nous avons un moyen d'obtenir l'extension de capture d'écran de .png en utilisant python webdriver

utilisez le code ci-dessous si vous travaillez dans python webriver.it est très simple.

driver.save_screenshot('D\folder\filename.png')
9
Kv.senthilkumar

Ici, ils ont posé une question similaire, et la réponse semble plus complète, je laisse la source:

Comment faire une capture d'écran partielle avec Selenium WebDriver en python?

from Selenium import webdriver
from PIL import Image
from io import BytesIO

fox = webdriver.Firefox()
fox.get('http://stackoverflow.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
4
driver.save_screenshot("path to save \\screen.jpeg")
3
Shaik

Bien sûr, ce n'est pas réel en ce moment, mais j'ai également rencontré ce problème et à ma façon: il semble que `` save_screenshot '' ait des problèmes avec la création de fichiers avec un espace dans le nom en même temps que j'ai ajouté la randomisation aux noms de fichiers pour échapper à la substitution.

Ici, j'ai une méthode pour nettoyer mon nom de fichier d'espaces blancs ( Comment puis-je remplacer les espaces blancs par un trait de soulignement et 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

puis

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

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

screen_name = self.urlify(datetime_now('screen')) + '.png'
3

Cela prendra une capture d'écran et la placera dans un répertoire d'un nom choisi.

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

Vous pouvez utiliser la fonction ci-dessous pour le chemin relatif car le chemin absolu n'est pas une bonne idée d'ajouter dans le script

Importation

import sys, os

Utilisez le code comme ci-dessous:

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

assurez-vous de créer le dossier dans lequel le fichier .py est présent.

os.path.join vous empêche également d'exécuter votre script sur plusieurs plates-formes comme: UNIX et Windows. Il générera un séparateur de chemin selon le système d'exploitation lors de l'exécution. os.sep est similaire à File.separtor en Java

2
Shubham Jain
TakeScreenShot screenshot=new TakeScreenShot();
screenshot.screenShot("screenshots//TestScreenshot//password.png");

cela fonctionnera, veuillez essayer.

1
suriya kanagaraj