2012-01-17 18 views
37

Podczas wykonywania zrzutu ekranu przy użyciu Selenium Webdriver w oknach z pythonem, zrzut ekranu zapisywany jest bezpośrednio na ścieżce programu, czy istnieje sposób na zapisanie pliku .png do określonego katalogu?Zrzut ekranu z kamery internetowej

Odpowiedz

53

Zastosowanie driver.save_screenshot('/path/to/file') lub 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') 
-6

Rozumiem szukasz odpowiedzi w Pythonie, ale tutaj jest to, jak można by to zrobić w ruby ​​..

http://watirwebdriver.com/screenshots/

Jeśli działa tylko zapisując tylko w bieżącym katalogu. Najpierw przypisałbym obraz do zmiennej, a następnie zapiszę tę zmienną na dysk jako plik PNG.

np

image = b.screenshot.png 

File.open("testfile.png", "w") do |file| 
    file.puts "#{image}" 
end 

gdzie b jest zmienną przeglądarka używany przez webdriver. Mam elastyczność, aby zapewnić bezwzględną lub względną ścieżkę w "File.open", dzięki czemu mogę zapisać obraz w dowolnym miejscu.

7

Tak, mamy sposób na rozszerzenie ekranu z .png przy użyciu Pythona webdriver

użytku poniższy kod Jeśli pracuje w Pythonie webriver.it jest bardzo prosta.

driver.save_screenshot('D\folder\filename.png') 
17

Zainspirowany z tego wątku (to samo pytanie dla 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() 
3

Oczywiście to nie jest rzeczywisty, ale teraz w obliczu tego problemu również i mój sposób: Wygląda „save_screenshot” Mam pewne problemy z tworzeniem plików z miejscem w nazwie w tym samym czasie, ponieważ dodałem randomizację do nazw plików dla uniknięcia przesłonięcia.

Tutaj mam metodę czyścić nazwę pliku 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"[^\w\s]", '', s) 
    # Replace all runs of whitespace with a single dash 
    s = re.sub(r"\s+", '-', s) 
    return s 

następnie

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

gdzie

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

screen_name = self.urlify(datetime_now('screen')) + '.png' 
1
driver.save_screenshot("path to save \\screen.jpeg") 
0

Można użyć poniżej funkcji dla względny ścieżka jako ścieżka bezwzględna nie jest dobrym pomysłem jest dodanie w skrypcie

importu

import sys, os 

Użyj kodu jak poniżej:

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

upewnij się utworzyć folder, w którym plik .py jest obecny .

os.path.join również uniemożliwić uruchomienie skryptu na wielu platformach, takich jak: UNIX i Windows. Wygeneruje separator ścieżki, jak na OS w czasie wykonywania. os.sep jest podobny do File.separtor w języku Java

Powiązane problemy