是否可以使用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);
}
上面的代码工作正常,首先弹出一个窗口,然后加载
网址。理想情况下,我想做的下一件事是抓取屏幕截图
加载的网页的数量。现在,这些浏览器窗口会弹出
Xvfb虚拟桌面,我可以使用ImageMagick的导入工具来抓取
目标窗口的屏幕截图,但前提是它位于
前景。
这是一个问题,因为此应用程序旨在在
与多个窗口并行弹出虚拟桌面。任何
与目标窗口重叠的窗口只会给我黑色
屏幕快照,因为Xfvb仅呈现可见的内容。
我还研究了API引用chrome.tabs.captureVisibleTab。那里没有运气,它无法捕获不可见的内容。
有没有一种方法,可以使用远程调试器来获取
打开 window ?
(仅供引用,我导入的ImageMagick命令是此)
DISPLAY=:0.0 import -window "Google - Chromium" screenshot.png
使用上述loadPage()在我的 Chrome 浏览器中打开URL http://www.google.com的位置。只要弹出的“Google-Chromium”窗口不受阻碍且具有焦点,它就可以很好地工作。在它的一部分上放另一个窗口,我得到一个未渲染的大黑色区域。
谢谢!
最佳答案
Chrome远程调试协议(protocol)现在支持 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)