When taking a screenshot using Selenium Webdriver on windows with python, the screenshot is saved directly to the path of the program, is there a way to save the .png file to a specific directory?
import selenium.webdriver as webdriver import contextlib 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')
Inspired from this thread (same question for 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()
Yes, we have a way to get screenshot extension of .png using python webdriver
use below code if you working in python webriver.it is very simple.
driver.save_screenshot("path to save \screen.jpeg")
Sure it isn’t actual right now but I faced this issue also and my way:
Looks like ‘save_screenshot’ have some troubles with creating files with space in name same time as I added randomization to filenames for escaping override.
Here I got method to clean my filename of whitespaces (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"[^ws]", '', s) # Replace all runs of whitespace with a single dash s = re.sub(r"s+", '-', s) return s
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'
Here they asked a similar question, and the answer seems more complete, I leave the source:
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
This will take screenshot and place it in a directory of a chosen name.
import os driver.save_screenshot(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'NameOfScreenShotDirectory', 'PutFileNameHere'))
You can use below function for relative path as absolute path is not a good idea to add in script
import sys, os
Use code as below :
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")
make sure you create the folder where the .py file is present.
os.path.join also prevent you to run your script in cross-platform like: UNIX and windows. It will generate path separator as per OS at runtime.
os.sep is similar like
File.separtor in java