使用Chrome开发者工具获取Chrome的屏幕截图?

AWT*_*AWT 6 java debugging google-chrome google-chrome-extension google-chrome-devtools

是否可以使用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
               + "');\""
               + "}}");
Run Code Online (Sandbox Code Playgroud)

(hsc是我在http:// localhost:9222上与调试器的连接)

然后,我用这个加载我的目标网址:

    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);
   }
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,首先弹出一个窗口,然后加载URL.理想情况下,我想要做的下一件事是获取加载的网页的屏幕截图.现在,这些浏览器窗口会弹出一个Xvfb虚拟桌面,我可以使用ImageMagick的导入工具来获取目标窗口的屏幕截图,但前提是它位于前台.

这是一个问题,因为此应用程序旨在与多个窗口并行运行到虚拟桌面中.任何与我的目标窗口重叠的窗口都会给我一个黑色截图,因为Xfvb只呈现可见的内容.

我还查看了API参考,chrome.tabs.captureVisibleTab.那里没有运气,它没有捕捉到不可见的东西.

有没有办法,使用远程调试器,抓取打开窗口的屏幕截图?

(供参考,我的ImageMagick命令用于导入是这个)

    DISPLAY=:0.0 import -window "Google - Chromium" screenshot.png
Run Code Online (Sandbox Code Playgroud)

我使用上面的loadPage()在我的chrome浏览器中打开URL http://www.google.com的地方.只要弹出的"Google - Chromium"窗口畅通无阻且具有焦点,它就能很好地工作.在其中的一部分上放下另一个窗口,我得到一个未渲染的大黑区域.

谢谢!

Din*_*ruz 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()
Run Code Online (Sandbox Code Playgroud)

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