Что нового

[Автоматизация] Сохранение PDF-файла из IE и отправка на печать, не имея явной ссылки на него

sh0ha

Новичок
Сообщения
3
Репутация
0
День добрый, подскажите пожалуйста, на странице сайта есть кнопка "Печать", после нажатия которого загружается PDF документ. Мне необходимо автоматизировать процесс сохранения и последующей печати загруженного PDF-файла.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Нужно версия браузера и скриншот как происходит процесс сохранения.
 
Автор
S

sh0ha

Новичок
Сообщения
3
Репутация
0
inververs сказал(а):
Нужно версия браузера и скриншот как происходит процесс сохранения.

Версия браузера Internet Explorer 11, скриншот прилагаю


Добавлено:
Сообщение автоматически объединено:

Ребята помогите, очень нужно! Я с Autoit первый день знаком.
 

Вложения

  • screen.png
    screen.png
    11.1 КБ · Просмотры: 26

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
С какого момента нужен скрип? С нажатия на кнопку печать? С нажатия на кнопку сохранить?


Добавлено:
Сообщение автоматически объединено:

Я могу помочь с момента, когда браузер уже показывает диалог сохранения. Т.е вы сами должны нажать печать.
Что бы этот скрипт работал, вам нужно скачать библиотеку https://autoit-script.ru/index.php?topic=16780.0 и распаковать файлы в туже папку, где будет скрипт.

Сам скрипт:
Код:
#include 'UIAutomate.au3'
If Not _IeNotificationBarClick() Then
	MsgBox(16 + 262144, 'Скрипт завершен с ошибкой', @error)
	Exit 1
EndIf
MsgBox(64 + 262144, 'Выполено успешно', 'Нажато сохранить. Вам осталось дождаться загрузки и распечатать файл.')
_IeNotificationBarClick('Закрыть')

Func _IeNotificationBarClick($sText = 'Сохранить')
	Local $hNotificationBar = ControlGetHandle('[CLASS:IEFrame;]', '', '[CLASS:Frame Notification Bar; INSTANCE:1]')
	If @error Or Not $hNotificationBar Then
		Return SetError(1, @error, False)
	EndIf
	Local $oNotificationBar = _UIA_GetElementFromHandle($hNotificationBar)
	If @error Or Not IsObj($oNotificationBar) Then
		Return SetError(2, @error, False)
	EndIf
	Local $oCondition = _UIA_CreatePropertyCondition($UIA_NamePropertyId, $sText)
	If @error Or Not IsObj($oCondition) Then
		Return SetError(3, @error, False)
	EndIf
	Local $oButton = _UIA_GetElementFromCondition($oNotificationBar, $oCondition)
	If @error Or Not IsObj($oButton) Then
		Return SetError(4, @error, False)
	EndIf
	If Not _UIA_ElementDoDefaultAction($oButton) Then
		Return SetError(5, @error, False)
	EndIf
	Return True
EndFunc
 

vovsla

Осваивающий
Сообщения
607
Репутация
36
По идее на странице в любом случае должна быть ссылка на сам pdf, т.е. его можно скачать
А распечатать можно так
Код:
ShellExecuteWait('имя файла', '', '', 'print')


Была бы ссылка на страницу можно было бы сделать сохранение


Добавлено:
Сообщение автоматически объединено:

Или просто текст страницы
 
Автор
S

sh0ha

Новичок
Сообщения
3
Репутация
0
inververs сказал(а):
С какого момента нужен скрип? С нажатия на кнопку печать? С нажатия на кнопку сохранить?


Добавлено:
Сообщение автоматически объединено:

Я могу помочь с момента, когда браузер уже показывает диалог сохранения. Т.е вы сами должны нажать печать.

Сам скрипт:
Код:
#include 'UIAutomate.au3'
If Not _IeNotificationBarClick() Then
	MsgBox(16 + 262144, 'Скрипт завершен с ошибкой', @error)
	Exit 1
EndIf
MsgBox(64 + 262144, 'Выполено успешно', 'Нажато сохранить. Вам осталось дождаться загрузки и распечатать файл.')
_IeNotificationBarClick('Закрыть')

Func _IeNotificationBarClick($sText = 'Сохранить')
	Local $hNotificationBar = ControlGetHandle('[CLASS:IEFrame;]', '', '[CLASS:Frame Notification Bar; INSTANCE:1]')
	If @error Or Not $hNotificationBar Then
		Return SetError(1, @error, False)
	EndIf
	Local $oNotificationBar = _UIA_GetElementFromHandle($hNotificationBar)
	If @error Or Not IsObj($oNotificationBar) Then
		Return SetError(2, @error, False)
	EndIf
	Local $oCondition = _UIA_CreatePropertyCondition($UIA_NamePropertyId, $sText)
	If @error Or Not IsObj($oCondition) Then
		Return SetError(3, @error, False)
	EndIf
	Local $oButton = _UIA_GetElementFromCondition($oNotificationBar, $oCondition)
	If @error Or Not IsObj($oButton) Then
		Return SetError(4, @error, False)
	EndIf
	If Not _UIA_ElementDoDefaultAction($oButton) Then
		Return SetError(5, @error, False)
	EndIf
	Return True
EndFunc




Спасибо большое, работает!
А как сделать что бы скрипт после нажатия кнопки Сохранить не завершался, а ждал следующее окно когда будет предложено сохранить?


Добавлено:
Сообщение автоматически объединено:

Vovsla сказал(а):
По идее на странице в любом случае должна быть ссылка на сам pdf, т.е. его можно скачать
А распечатать можно так
Код:
ShellExecuteWait('имя файла', '', '', 'print')


Была бы ссылка на страницу можно было бы сделать сохранение


Добавлено:
Сообщение автоматически объединено:

Или просто текст страницы






Ссылка есть, но вот примерно такая: http://......../ReportService/GetReportFile/ReportCacheKey_237451b1-ef64-4fb5-8e5a-3aaea0ce4ff5
 

vovsla

Осваивающий
Сообщения
607
Репутация
36
Ссылка есть, но вот примерно такая: http://......../ReportService/GetReportFile/ReportCacheKey_237451b1-ef64-4fb5-8e5a-3aaea0ce4ff5

Нужен было содержимое самой страницы, по сути нужно узнать прямую ссылку на PDF чтобы его скачать. Если она всегда одна и та же, то можно только ее и использовать, если нет, то нужно будет получать из содержимого страницы
 
Верх