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?
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')
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()
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')
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
driver.save_screenshot("path to save \\screen.jpeg")
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)
où
def datetime_now(prefix):
symbols = str(datetime.datetime.now())
return prefix + "-" + "".join(symbols)
screen_name = self.urlify(datetime_now('screen')) + '.png'
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'))
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
TakeScreenShot screenshot=new TakeScreenShot();
screenshot.screenShot("screenshots//TestScreenshot//password.png");
cela fonctionnera, veuillez essayer.