6

是否可以使用Chrome開發工具遠程調試器獲取打開窗口的屏幕截圖?使用Chrome開發人員工具獲取Chrome的屏幕截圖?

例如,我連接到遠程調試端口和我有此 代碼,彈出一個空的窗口:

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是在我的http://localhost:9222到調試器連接)

於是,我打開了我的目標URL與此:

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); 
    } 

上面的代碼工作正常,並首先彈出一個窗口,然後加載 URL。理想情況下,我想要做的下一件事是抓取加載的網頁的屏幕截圖 。現在,這些瀏覽器窗口彈出一個 Xvfb虛擬桌面,我可以使用ImageMagick的導入工具抓取目標窗口的屏幕截圖,但只有在 的前景中才有

這是一個問題,因爲此應用程序被設計爲在彈出到虛擬桌面的多個窗口並行運行,並且運行在 之間。任何與我的目標窗口重疊的 窗口只會給我一個黑色的 屏幕截圖,因爲Xfvb只呈現可見的內容。

我還查看了API參考chrome.tabs.captureVisibleTab。那裏沒有運氣,它沒有捕獲什麼是不可見的。

有沒有一種方法,使用遠程調試器來獲取 打開窗口的屏幕截圖?

(僅供參考用途,進口我ImageMagick的命令是這樣的)

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

當我在上面()使用loadPage在我的鉻瀏覽器中打開URL http://www.google.com。只要彈出的「Google - Chromium」窗口暢通無阻並且重點突出,它就會很好。將另一個窗口放在它的一部分上,我得到一個沒有渲染的黑色區域。

謝謝!

回答

4

Chrome遠程調試協議現在支持Page.captureScreenshot功能

這裏是咖啡腳本的示例

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

(摘錄自 https://github.com/TeamMentor/TM_4_0_Design/blob/Issue_80_Jade_Cleanup/QA/API/QA-TM_4_0_Design.coffee#L54

+0

鏈接是死:(你如何訪問/創建'Page'對象? – user2561747 2017-02-11 20:16:59

+1

嗨,它看起來像一個分支,是不存在了 看看 https://github.com/TeamMentor/TM_4_0_Design/blob/94612a699aa03565bea6c045400bccd1cc68dd76/QA/API/QA-TM_4_0_Design.coffee#L56 和 https://github.com/TeamMentor/TM_4_0_Design /blob/94612a699aa03565bea6c045400bccd1cc68dd76/QA/tests/help-pages.coffee#L40 – 2017-02-13 11:31:26

+0

對於只想在控制檯窗格中粘貼命令或按快捷鍵的用戶,有沒有什麼可用的東西? – Pysis 2017-07-17 18:55:18

0
+0

嗨阿德爾,我看着觀鳥園和它有一些有趣的選項和公共API,但是API向圖像編輯爲目標。我沒有看到任何讓我以編程方式抓取截圖的東西,所以我的搜索仍在繼續。謝謝! – AWT 2012-01-30 15:06:53

+0

@torgis我希望你找到你正在尋找的東西! – 2012-02-22 21:44:41

+1

我發現了一些有趣的東西,但沒有什麼是我正在尋找的東西。相反,我正在寫我自己的過程。祝我好運! :) – AWT 2012-02-22 21:52:06

0

如果你需要基於Java的解決方案使用cdp4j捕捉整版屏幕。

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

相關問題