2012-01-17 585 views
37

在使用Python的Windows上使用Selenium Webdriver截圖時,屏幕截圖直接保存到程序的路徑中,是否有將.png文件保存到特定目錄的方法?Webdriver屏幕截圖

回答

53

使用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') 
-6

我明白你正在尋找一個Python的答案,但這裏是一個如何做到這一點的紅寶石..

http://watirwebdriver.com/screenshots/

如果只能保存在當前目錄中。我首先將圖像分配給一個變量,然後將該變量作爲PNG文件保存到磁盤。

例如:

image = b.screenshot.png 

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

其中b是通過webdriver的使用的瀏覽器變量。我可以靈活地在「File.open」中提供絕對或相對路徑,以便將圖像保存到任何地方。

7

是的,我們有一個辦法讓使用python的webdriver下面的代碼

的使用,如果你在Python webriver.it工作是非常簡單的png格式的截圖擴展。

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

從這個線程(用於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

當然它現在是不實際的,但我也面臨這個問題,我的方式: 看起來像「save_screenshot」在創建具有空間名稱的文件時遇到一些麻煩,因爲我在隨機化過程中添加了用於轉義覆蓋的文件名。

這裏我的方法來清洗我的空格的文件名(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 

然後

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

您可以使用以下功能相對的如下路徑作爲絕對路徑是不是一個好主意,在腳本中添加

進口

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類似於File.separtor in java