Selenium Webdriverを使用してWindowsでpythonを使用してスクリーンショットを撮るとき、スクリーンショットはプログラムのパスに直接保存されますが、.pngファイルを特定のディレクトリに保存する方法はありますか?
driver.save_screenshot('/path/to/file')
または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')
このスレッドからインスパイアされました(Javaに関する同じ質問): Selenium WebDriverでスクリーンショットを撮る
from Selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://www.google.com/')
browser.save_screenshot('screenie.png')
browser.quit()
はい、python webdriverを使用して.pngのスクリーンショット拡張子を取得する方法があります
python webriver.itは非常に簡単です。
driver.save_screenshot('D\folder\filename.png')
ここで彼らは同様の質問をしました、そして、答えはより完全なようです、私はソースを去ります:
PythonでSelenium WebDriverを使用して部分的なスクリーンショットを撮る方法は?
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")
確かにそれは今のところ実際ではありませんが、私はこの問題と私の方法に直面しました:「save_screenshot」は、エスケープを無効にするためにファイル名にランダム化を追加すると同時に、名前にスペースを持つファイルを作成するのにいくつかの問題があります。
ここで、空白のファイル名を消去する方法を取得しました( 空白をアンダースコアに、またはその逆に置き換えるにはどうすればよいですか? ):
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
それから
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'
これによりスクリーンショットが取得され、選択した名前のディレクトリに配置されます。
import os
driver.save_screenshot(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'NameOfScreenShotDirectory', 'PutFileNameHere'))
絶対パスはスクリプトに追加することはお勧めできませんので、相対パスには以下の関数を使用できます
インポート
import sys, os
以下のコードを使用します。
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")
.pyファイルが存在するフォルダーを作成してください。
os.path.join
は、UNIXやWindowsなどのクロスプラットフォームでスクリプトを実行できないようにします。実行時にOSごとにパス区切り文字を生成します。 os.sep
は、JavaのFile.separtor
に似ています
TakeScreenShot screenshot=new TakeScreenShot();
screenshot.screenShot("screenshots//TestScreenshot//password.png");
動作しますので、お試しください。