2012-01-17 50 views
37

Khi chụp ảnh chụp màn hình bằng Trình quản lý web Selenium trên cửa sổ bằng python, ảnh chụp màn hình được lưu trực tiếp vào đường dẫn của chương trình, có cách nào để lưu tệp .png vào một thư mục cụ thể không?Ảnh chụp màn hình Webdriver

Trả lời

53

Sử dụng driver.save_screenshot('/path/to/file') hoặc 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

Tôi hiểu bạn đang tìm kiếm một câu trả lời trong python, nhưng đây là cách người ta sẽ làm điều đó trong ruby ​​..

http://watirwebdriver.com/screenshots/

Nếu đó chỉ hoạt động bằng cách lưu trong thư mục hiện tại chỉ .. Trước tiên tôi sẽ gán hình ảnh cho một biến và sau đó lưu biến đó vào đĩa dưới dạng tệp PNG.

ví dụ:

image = b.screenshot.png 

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

nơi b là biến trình duyệt được sử dụng bởi webdriver. tôi có sự linh hoạt để cung cấp một đường dẫn tuyệt đối hoặc tương đối trong "File.open" để tôi có thể lưu hình ảnh ở bất cứ đâu.

7

Vâng, chúng ta có một cách để có được mở rộng ảnh chụp màn hình của .png sử dụng python webdriver

sử dụng dưới mã nếu bạn làm việc trong python webriver.it là rất đơn giản.

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

Lấy cảm hứng từ chủ đề này (cùng một câu hỏi cho 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

Chắc chắn nó không phải là thực tế ngay bây giờ nhưng tôi phải đối mặt với vấn đề này cũng và cách của tôi: Hình như 'save_screenshot' có một số rắc rối khi tạo tệp với không gian trong cùng một tên khi tôi thêm ngẫu nhiên vào tên tệp để ghi đè thoát.

Ở đây tôi có phương pháp để làm sạch filename của tôi về khoảng trắng (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 

sau đó

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

nơi

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

Bạn có thể sử dụng bên dưới chức năng cho quan hệ con đường như đường dẫn tuyệt đối không phải là một ý tưởng tốt để thêm vào trong kịch bản

nhập

import sys, os 

Sử dụng mã như dưới đây:

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

chắc chắn rằng bạn tạo thư mục chứa file py có mặt .

os.path.join cũng ngăn bạn chạy tập lệnh của mình trong nhiều nền tảng như: UNIX và windows. Nó sẽ tạo ra phân cách đường dẫn theo hệ điều hành tại thời gian chạy. os.sep tương tự như File.separtor trong java

Các vấn đề liên quan