6

Có thể chụp ảnh màn hình của một cửa sổ đang mở bằng trình gỡ lỗi từ xa Công cụ phát triển Chrome không?Chụp ảnh màn hình của Chrome bằng Công cụ dành cho nhà phát triển Chrome?

Ví dụ, tôi đang kết nối vào cổng debug từ xa và tôi có mã này mà bật một cửa sổ trống:

private void sendWindowPop(int width, int height) throws 
IOException { 
     hsc.send("{\"method\": \"Runtime.evaluate\", \"id\": " 
       + hsc.nextInt() 
       + ", \"params\": {" 
       + "\"expression\": 
\"window.open('about:blank','name','toolbar=0,scrollbars=0," 
       + "location=0,status=0,menubar=0,resizable=0,width=" 
       + width 
       + ",height=" 
       + height 
       + "');\"" 
       + "}}"); 

(HSC là kết nối của tôi đến debugger tại http://localhost:9222)

Sau đó, tôi tải lên URL mục tiêu của mình với điều này:

private void loadPage(String uriString) throws IOException { 
     hsc.send("{\"method\": \"Page.open\", \"id\": " + 
     hsc.nextInt() + ", \"params\": {\"url\": \"" + uriString + "\"}}"); 
     hsc.waitFor(ChromeNotifications.PAGE_LOADEVENTFIRED, DEFAULT_TIMEOUT_MILLIS); 
    } 

Mã ở trên hoạt động tốt và trước tiên bật cửa sổ và sau đó tải URL. Lý tưởng nhất, điều tiếp theo tôi muốn làm là lấy một ảnh chụp màn hình của trang web đã tải. Ngay bây giờ, các cửa sổ trình duyệt này bật lên màn hình ảo Xvfb và tôi có thể sử dụng công cụ nhập của ImageMagick để chụp ảnh chụp màn hình của cửa sổ mục tiêu, nhưng chỉ nếu ở trong foreground.

Đây là một vấn đề, vì ứng dụng này được thiết kế để chạy trong song song với nhiều cửa sổ bật vào màn hình ảo. Mọi cửa sổ chồng lên cửa sổ mục tiêu của tôi sẽ chỉ cho tôi một ảnh chụp màn hình màu đen , vì Xfvb chỉ hiển thị nội dung hiển thị.

Tôi cũng đã xem xét tham chiếu API, chrome.tabs.captureVisibleTab. Không có may mắn ở đó, nó không nắm bắt những gì không nhìn thấy được.

Có cách nào, sử dụng trình gỡ lỗi từ xa, để chụp ảnh màn hình của một cửa sổ mở không?

(cho mục đích tham khảo, lệnh ImageMagick tôi nhập khẩu là này)

DISPLAY=:0.0 import -window "Google - Chromium" screenshot.png 

Nơi tôi mở URL http://www.google.com trong trình duyệt crom của tôi sử dụng loadPage() ở trên. Nó hoạt động tuyệt vời miễn là cửa sổ "Google - Chromium" bật lên không bị cản trở và có tiêu điểm. Thả một cửa sổ khác trên một phần của nó, và tôi nhận được một khu vực màu đen lớn mà không được trả lại.

Cảm ơn!

Trả lời

4

Chrome Remote Debugging Nghị định thư bây giờ hỗ trợ các Page.captureScreenshot chức năng

Dưới đây là một ví dụ trong cà phê kịch bản

screenshot: (name, callback)=> 
    safeName = name.replace(/[^()^a-z0-9._-]/gi, '_') + ".png" 
    png_File = "./_screenshots".append_To_Process_Cwd_Path().folder_Create() 
           .path_Combine(safeName) 

    @chrome._chrome.Page.captureScreenshot (err, image)-> 
     require('fs').writeFile png_File, image.data, 'base64',(err)-> 
     callback() 

(đoạn từ https://github.com/TeamMentor/TM_4_0_Design/blob/Issue_80_Jade_Cleanup/QA/API/QA-TM_4_0_Design.coffee#L54)

+0

Liên kết đã chết: (Bạn truy cập/tạo đối tượng 'Page' như thế nào? – user2561747

+1

Xin chào, có vẻ như chi nhánh đó không còn nữa hãy nhìn vào https://github.com/TeamMentor/TM_4_0_Design/blob/94612a699aa03565bea6c045400bccd1cc68dd76/QA/API/QA-TM_4_0_Design.coffee#L56 và https://github.com/TeamMentor/TM_4_0_Design /blob/94612a699aa03565bea6c045400bccd1cc68dd76/QA/tests/help-pages.coffee#L40 –

+0

Có điều gì có thể sử dụng ở đây cho người nào đó chỉ muốn dán lệnh trong bảng điều khiển hoặc nhấn phím nóng không? – Pysis

0
+0

Hi Adel, tôi nhìn vào Aviary và nó có một số tùy chọn thú vị và một API công cộng, nhưng API được hướng tới chỉnh sửa hình ảnh. Tôi không thấy bất cứ điều gì cho phép tôi chụp ảnh màn hình theo chương trình, vì vậy tìm kiếm của tôi vẫn tiếp tục. Cảm ơn! – AWT

+0

@torgis Tôi hy vọng bạn tìm thấy những gì bạn đang tìm kiếm! –

+1

Tôi tìm thấy một số điều thú vị nhưng không có gì làm chính xác những gì tôi đang tìm kiếm. Thay vào đó, tôi đang trong quá trình viết của riêng tôi. Chúc tôi may mắn! :) – AWT

0

Nếu bạn cần Java dựa trên giải pháp sử dụng cdp4j để nắm bắt trang đầy đủ màn hình.

public static void main(String[] args) throws IOException, InterruptedException { 
    SessionFactory factory = new Launcher().launch(); 

    Path file = createTempFile("screenshot", ".png"); 

    try (Session session = factory.create()) { 
     session.navigate("https://webfolder.io"); 
     session.waitDocumentReady(); 
     byte[] data = session.captureScreenshot(); 
     write(file, data); 
    } 

    if (isDesktopSupported()) { 
     getDesktop().open(file.toFile()); 
    } 

    factory.close(); 
} 

Screenshot.java

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