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