采取JavaScript的网页截图?

是否有可能采取JavaScript的网页截图,然后提交回服务器?

我不太关心浏览器的安全问题。 等等,因为执行将是HTA 。 但是有可能吗?

我已经通过使用ActiveX控件完成了HTA。 在VB6中构build控件以获取屏幕截图非常简单。 我不得不使用keybd_event API调用,因为SendKeys无法执行PrintScreen。 以下是代码:

Declare Sub keybd_event Lib "user32" _ (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Public Const CaptWindow = 2 Public Sub ScreenGrab() keybd_event &H12, 0, 0, 0 keybd_event &H2C, CaptWindow, 0, 0 keybd_event &H2C, CaptWindow, &H2, 0 keybd_event &H12, 0, &H2, 0 End Sub 

这只能让你得到窗口剪贴板。

另一种select是,如果你想要截图的窗口是HTA,那么只需使用XMLHTTPRequest将DOM节点发送到服务器,然后在服务器端创build截图。

谷歌正在做这个在Google+和一个有才华的开发人员逆向工程,并制作http://html2canvas.hertzen.com/ 。 要在IE中工作,您需要一个canvas支持库,例如http://excanvas.sourceforge.net/

我发现的另一个可能的解决scheme是http://www.phantomjs.org/ ,它可以非常方便地截取页面和更多的截图。 虽然我对这个问题的原始要求不再有效(不同的工作),我可能会将PhantomJS整合到未来的项目中。

Pounder的,如果这可以通过设置整个身体元素成为一个canvas然后使用canvas2image?

http://www.nihilogic.dk/labs/canvas2image/

一个可能的方法来做到这一点,如果在Windows上运行并安装.NET,你可以这样做:

 public Bitmap GenerateScreenshot(string url) { // This method gets a screenshot of the webpage // rendered at its full size (height and width) return GenerateScreenshot(url, -1, -1); } public Bitmap GenerateScreenshot(string url, int width, int height) { // Load the webpage into a WebBrowser control WebBrowser wb = new WebBrowser(); wb.ScrollBarsEnabled = false; wb.ScriptErrorsSuppressed = true; wb.Navigate(url); while (wb.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); } // Set the size of the WebBrowser control wb.Width = width; wb.Height = height; if (width == -1) { // Take Screenshot of the web pages full width wb.Width = wb.Document.Body.ScrollRectangle.Width; } if (height == -1) { // Take Screenshot of the web pages full height wb.Height = wb.Document.Body.ScrollRectangle.Height; } // Get a Bitmap representation of the webpage as it's rendered in the WebBrowser control Bitmap bitmap = new Bitmap(wb.Width, wb.Height); wb.DrawToBitmap(bitmap, new Rectangle(0, 0, wb.Width, wb.Height)); wb.Dispose(); return bitmap; } 

然后通过PHP你可以这样做:

exec("CreateScreenShot.exe -url http://.... -save C:/shots domain_page.png");

然后你在服务器端有截图。

这可能不是您理想的解决scheme,但仍值得一提。

Snapsie是一个开放源代码的ActiveX对象,可以捕获并保存Internet Explorer屏幕截图。 一旦在客户端注册DLL文件,您应该能够捕获截图并使用JavaScript将file upload到服务器。 缺点:需要在客户端注册DLL文件,只能用于Internet Explorer。

我们有类似的报告错误的要求。 由于是针对Intranet的情况,因此我们可以使用浏览器插件(例如用于Firefox的Fireshot和用于Internet Explorer的IE截图 )。

SnapEngage使用Java applet (1.5+)来制作浏览器截图。 AFAIK, java.awt.Robot应该做这个工作 – 用户只需要允许applet执行(一次)。

我刚刚find一个关于它的post:

  • JavaScript溢出问题JavaScript代码在不使用ActiveX的情况下截取网站的截图
  • 博客文章Snapabug如何工作 – 以及他们应该做什么

你可以使用HTA和VBScript来实现。 只需调用一个外部工具来执行屏幕截图。 我忘了名字是什么,但在Windows Vista上有一个工具来做截图。 你甚至不需要额外的安装。

至于自动 – 完全取决于你使用的工具。 如果它有一个API,我相信你可以通过几个Visual Basic调用触发屏幕截图和保存过程,而不需要用户知道你做了什么。

既然你提到HTA,我假设你在Windows上,并且(可能)非常熟悉你的环境(例如操作系统和版本)。

截取JavaScript的一个很好的解决scheme是https://grabz.it

他们有一个灵活和简单易用的截图API,可以被任何types的JS应用程序使用。

如果你想尝试它,首先你应该得到授权应用程序密钥+秘密和免费的SDK

然后,在您的应用程序中,实施步骤将是:

 // include the grabzit.min.js library in the web page you want the capture to appear <script src="grabzit.min.js"></script> //use the key and the secret to login, capture the url <script> GrabzIt("KEY", "SECRET").ConvertURL("http://www.google.com").Create(); </script> 

截图可以用不同的参数来定制。 例如:

 GrabzIt("KEY", "SECRET").ConvertURL("http://www.google.com", {"width": 400, "height": 400, "format": "png", "delay", 10000}).Create(); </script> 

就这样。 然后只需稍等片刻,图像就会自动出现在页面的底部,而无需重新加载页面。

截图机制还有其他function,您可以在这里浏览 。

也可以在本地保存屏幕截图。 为此,您将需要使用GrabzIt服务器端API。 欲了解更多信息,请点击这里查看详细指南