hta - أخذ لقطة شاشة لصفحة ويب باستخدام جافا سكريبت؟
هل من الممكن أخذ لقطة شاشة لصفحة ويب باستخدام جافاسكريبت ثم إرسالها مرة أخرى إلى الخادم؟
لست قلقًا جدًا بشأن مشاكل أمان المتصفح، وما إلى ذلك، لأن التنفيذ سيكون لـ HTA. لكن هل هذا ممكن؟
الإجابة رقم 1
تقوم Google بذلك في Google+ وقد قام مطور موهوب بفك تشفيره وإنتاج http://html2canvas.hertzen.com/. للعمل في IE ستحتاج إلى مكتبة دعم canvas مثل http://excanvas.sourceforge.net/
الإجابة رقم 2
لقد قمت بذلك لـ HTA باستخدام عنصر تحكم ActiveX. كان من السهل جدًا بناء العنصر التحكم في VB6 لألتقاط لقطة الشاشة. كان علي استخدام استدعاء API الخاص بـ keybd_event لأن 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
ذلك يوصلك فقط إلى حد نسخ النافذة إلى الحافظة.
خيار آخر، إذا كانت النافذة التي تريد أخذ لقطة شاشة لها هي HTA، سيكون ببساطة استخدام XMLHTTPRequest لإرسال عقد DOM إلى الخادم، ثم إنشاء لقطات الشاشة على جانب الخادم.
الإجابة رقم 3
حل آخر محتمل اكتشفته هو http://www.phantomjs.org/ الذي يسمح للمرء بأخذ لقطات شاشة للصفحات بسهولة فائقة والكثير من الميزات الأخرى. على الرغم من أن متطلباتي الأصلية لهذا السؤال لم تعد صالحة بعد الآن (وظيفة مختلفة)، قد أدمج على الأرجح PhantomJS في المشاريع المستقبلية.
الإجابة رقم 4
هل من الممكن عمل ذلك عن طريق وضع جميع عناصر الجسم في لوحة ثم استخدام canvas2image؟
http://www.nihilogic.dk/labs/canvas2image/
الإجابة رقم 5
طريقة ممكنة للقيام بذلك، إذا كنت تعمل على نظام ويندوز ولديك .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");ثم لديك لقطة الشاشة في جانب الخادم.
