2012-01-17 14 views
37

पायथन के साथ विंडोज़ पर सेलेनियम वेबड्राइवर का उपयोग करके एक स्क्रीनशॉट लेते समय, स्क्रीनशॉट सीधे प्रोग्राम के पथ पर सहेजा जाता है, क्या .png फ़ाइल को किसी विशिष्ट निर्देशिका में सहेजने का कोई तरीका है?वेबड्राइवर स्क्रीनशॉट

उत्तर

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

मैं समझता हूँ कि आप अजगर में एक जवाब के लिए देख रहे हैं, लेकिन यहाँ कैसे एक गहरे लाल रंग का में यह करना होगा ..

http://watirwebdriver.com/screenshots/

कि यदि है केवल वर्तमान निर्देशिका में ही सहेजकर काम करता है .. मैं पहले छवि को एक चर को आवंटित करता हूं और फिर उस चर को एक पीएनजी फ़ाइल के रूप में डिस्क में सहेजता हूं।

जैसे:

image = b.screenshot.png 

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

जहां ख webdriver द्वारा इस्तेमाल किया ब्राउज़र चर रहा है। मेरे पास "File.open" में एक पूर्ण या सापेक्ष पथ प्रदान करने के लिए लचीलापन है, इसलिए मैं छवि को कहीं भी सहेज सकता हूं।

7

हाँ, हम webdriver कोड नीचे

उपयोग अजगर का उपयोग कर यदि आप अजगर webriver.it में काम कर बहुत सरल है .png के स्क्रीनशॉट विस्तार पाने के लिए एक रास्ता नहीं है।

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

इस सूत्र (जावा के लिए एक ही प्रश्न) से प्रेरित होकर: 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' 
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 आपको क्रॉस-प्लेटफार्म जैसे यूनिक्स और विंडोज़ में अपनी स्क्रिप्ट चलाने की भी रोकता है। यह रनटाइम पर ओएस के अनुसार पथ विभाजक उत्पन्न करेगा। os.sep जावा

में File.separtor जैसा है
संबंधित मुद्दे