web-dev-qa-db-ja.com

Webdriverスクリーンショット

Selenium Webdriverを使用してWindowsでpythonを使用してスクリーンショットを撮るとき、スクリーンショットはプログラムのパスに直接保存されますが、.pngファイルを特定のディレクトリに保存する方法はありますか?

47
user1152578

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')
66
unutbu

このスレッドからインスパイアされました(Javaに関する同じ質問): 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

はい、python webdriverを使用して.pngのスクリーンショット拡張子を取得する方法があります

python webriver.itは非常に簡単です。

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

ここで彼らは同様の質問をしました、そして、答えはより完全なようです、私はソースを去ります:

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
4
driver.save_screenshot("path to save \\screen.jpeg")
3
Shaik

確かにそれは今のところ実際ではありませんが、私はこの問題と私の方法に直面しました:「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'
3

これによりスクリーンショットが取得され、選択した名前のディレクトリに配置されます。

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

絶対パスはスクリプトに追加することはお勧めできませんので、相対パスには以下の関数を使用できます

インポート

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に似ています

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

動作しますので、お試しください。

1