inververs
AutoIT Гуру
- Сообщения
- 2,135
- Репутация
- 465
AutoIt: 3.3.10.0 или новее.
Категория: Автоматизация, Вспомогательные функции, GDI+, Интернет, IE
Описание: Функция _IE_Capture делает скриншот всего документа браузера Internet Explorer.
Документ прокручивается сверху вниз, делается скриншот текущей области. В конце все кусочки склеиваются в одно изображение.
Во время прокрутки окно должно быть видимым, не перекрытым другими окнами. Если окно - это вкладка, то она должна быть активной. Если на странице есть фиксированные элементы, то они будут дублироваться на снимке, поэтому перед началом, такие элементы делайте скрытыми.
Зависимости:
Код:
Пример:
Примеры скриншотов:
Источник: autoit-script.ru
Автор(ы): inververs
Не рекомендую версии не проходящие проверку OK здесь
Категория: Автоматизация, Вспомогательные функции, GDI+, Интернет, IE
Описание: Функция _IE_Capture делает скриншот всего документа браузера Internet Explorer.
Документ прокручивается сверху вниз, делается скриншот текущей области. В конце все кусочки склеиваются в одно изображение.
Во время прокрутки окно должно быть видимым, не перекрытым другими окнами. Если окно - это вкладка, то она должна быть активной. Если на странице есть фиксированные элементы, то они будут дублироваться на снимке, поэтому перед началом, такие элементы делайте скрытыми.
Зависимости:
Код:
#include <ScreenCapture.au3>
Код:
Код:
#include <ScreenCapture.au3>
; #FUNCTION# ====================================================================================================================
; Name ..........: _IE_Capture
; Description ...: IE Browser document screen shoot with scroll
; Description ...: Скриншот документа браузера с прокруткой. Только документ, без заголовка окна и панелей
; Syntax ........: _IE_Capture($oIe, $sImageFile[, $iMaxWidth = Default[, $fSetOnTop = Default[, $iScrollDelay = Default]]])
; Parameters ....: $oIe - Объект браузера IE возвращаемый функцией _IECreate или _IEAttach.
; $sImageFile - Имя файла куда будет сделан скриншот. Если не указано, возвращает hImage, не забудьте освободить его через _GDIPlus_BitmapDispose
; $iMaxWidth - [optional] An integer value. Default is Default. Установить ширину окна, по умолчанию - максимальная ширина документа
; $iScrollDelay - [optional] An integer value. Default is Default. Пауза после прокрутки. По умолчания 250. Увеличьте значение если будут артефакты.
; Return values .: $sImageFile|hImage - если выполнено без ошибок.
; False - если выполнено с ошибками.
; : Устанавливаются следующие коды ошибок:
; : @error: 0 - выполенно без ошибок
; : @error: 1 - $oIe не объект
; : @error: 2 - Не получен hwnd окна браузера
; : @error: 3 - Не получен Internet Explorer_Server контрол.
; : @error: 4 - Не получен объект document.
; Author ........: inververs
; Remarks .......: Элементы с position=fixed будут повторяться. Окно с документом должно быть видимым, вкладка должна быть активной.
; Related .......: _IECreate
; Link ..........:
; Example .......: #include <ie.au3>
; ShellExecute(_IE_Capture(_IECreate('https://yandex.ru/'), @ScriptDir & '\test.jpg'))
; ===============================================================================================================================
Func _IE_Capture($oIe, $sImageFile = Default, $iMaxWidth = Default, $iScrollDelay = Default)
Local Const $iWidthPlusNoScroll = 34
If Not IsObj($oIe) Then
Return SetError(1, 0, False)
EndIf
Local $hWnd = HWnd($oIe.hwnd)
If Not IsHWnd($hWnd) Then
Return SetError(2, 0, False)
EndIf
Local $hControl = ControlGetHandle($hWnd, '', '[CLASS:Internet Explorer_Server; INSTANCE:1]')
If Not IsHWnd($hControl) Then
Return SetError(3, 0, False)
EndIf
Local $oDocument = $oIe.document
If @error Or Not IsObj($oDocument) Then
Return SetError(4, 0, False)
EndIf
If $iScrollDelay = Default Then
$iScrollDelay = 250
EndIf
WinActivate($hWnd)
WinWaitActive($hWnd)
If $iMaxWidth = Default Then
$iMaxWidth = 0
Local $aWidth = [ _
$oDocument.body.scrollWidth, $oDocument.documentElement.scrollWidth, _
$oDocument.body.offsetWidth, $oDocument.documentElement.offsetWidth, _
$oDocument.body.clientWidth, $oDocument.documentElement.clientWidth]
For $iClientWidthidth In $aWidth
If $iClientWidthidth > $iMaxWidth Then $iMaxWidth = $iClientWidthidth
Next
WinMove($hWnd, '', Default, Default, $iMaxWidth + $iWidthPlusNoScroll)
ElseIf $iMaxWidth > 0 Then
WinMove($hWnd, '', Default, Default, $iMaxWidth)
EndIf
Local $aPos = ControlGetPos($hWnd, '', $hControl)
ReDim $aPos[4]
Local $iClientWidth = $aPos[2]
Local $iClientHeight = $aPos[3]
$oDocument.body.scroll = "no"
$oDocument.parentwindow.scrollTo(0, 0)
Sleep($iScrollDelay)
Local $iMaxHeight = 0
Local $aHeight = [ _
$oDocument.body.scrollHeight, $oDocument.documentElement.scrollHeight, _
$oDocument.body.offsetHeight, $oDocument.documentElement.offsetHeight, _
$oDocument.body.clientHeight, $oDocument.documentElement.clientHeight]
For $iHeight In $aHeight
If $iHeight > $iMaxHeight Then $iMaxHeight = $iHeight
Next
Local $iScrollCount = Ceiling($iMaxHeight / $iClientHeight)
_GDIPlus_Startup()
Local $hImage = _GDIPlus_BitmapCreateFromScan0($iClientWidth, $iMaxHeight)
Local $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage)
Local $iTop, $hBitmap, $hImage2
For $i = 0 To $iScrollCount - 1
$iTop = $i * $iClientHeight - $oDocument.documentElement.scrollTop
$hBitmap = _ScreenCapture_CaptureWnd('', $hControl, 0, $iTop, -1, -1, False)
$hImage2 = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_GraphicsDrawImage($hGraphics, $hImage2, 0, $i * $iClientHeight)
_GDIPlus_BitmapDispose($hImage2)
$oDocument.parentwindow.scrollBy(0, $iClientHeight)
Sleep($iScrollDelay)
Next
$oDocument.body.scroll = "yes"
_GDIPlus_GraphicsDispose($hGraphics)
Local $vReturn
If $sImageFile = Default Or Not $sImageFile Then
$vReturn = $hImage
Else
_GDIPlus_ImageSaveToFile($hImage, $sImageFile)
_GDIPlus_BitmapDispose($hImage)
$vReturn = $sImageFile
EndIf
_GDIPlus_Shutdown()
Return $vReturn
EndFunc
Пример:
Код:
#include <ScreenCapture.au3>
#include <ie.au3>
ShellExecute(_IE_Capture(_IECreate('https://ru.wikipedia.org/wiki/'), @ScriptDir & '\test2.jpg'))
Примеры скриншотов:
Источник: autoit-script.ru
Автор(ы): inververs