Что нового

[Автоматизация] Сохранение файла по ссылке

k37

Новичок
Сообщения
2
Репутация
0
Требуется сохранить файл по ссылке. Написал код.

Код:
#include <IE.au3>

$oIE = _IECreate('http://fs.rts.ru/files/2892',0,1)
	_IELoadWait ($oIE)
    $oLinks = _IELinkGetCollection($oIE)
    For $oLink in $oLinks
		ConsoleWrite(_IEPropertyGet($oLink, "innerText") & @CRLF)
		if StringInStr(_IEPropertyGet($oLink, "innerText"), "Правила совершения") > 0 Then
			_IEAction($oLink, "click")
			while not WinExists("Загрузка файлов")
				Sleep(1000)
			WEnd
		endif
	Next

В результате в IE8 возникает сообщение
"Чтобы помочь обеспечению безопасности, Internet Explorer заблокировал загрузку файлов на компьютер с этого веб-узла. Щелкните здесь для выбора параметров..."
Я щелкаю, нажимаю "загрузить файл..." окно с сохранением не появляется.
Если просто щелкнуть на ссылку мышкой вручную, то сразу возникает окно о сохранении файла.
Что я не так делаю?
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
снизить уровень безопасности в настройках браузера
и можно загрузить файл по другому. на странице полная ссылка к файлу выглядит так http://fs.rts.ru/files/2892/8901
его можно загрузить так
Код:
InetGet('http://fs.rts.ru/files/2892/8901','file.doc')
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
k37
вот нечто ..что отдаленно похоже на то, что нужно...
конечно бы хорошо очистить ссылки в комбо от мусора, но я не спец в регулярных выражениях
собрал из примеров с форума и справки :smile:

Код:
#include <IE.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <File.au3>
#include <Array.au3>

$clean = FileOpen('link.txt', 2)
FileClose($clean)
$oIE = _IECreate('http://fs.rts.ru/files/2892', 0, 0)
Dim $aRecords

$oLinks = _IETagNameGetCollection($oIE, 'a')
For $oLink In $oLinks
	;MsgBox(0, '', $oLink.InnerText & @CRLF &  $oLink.href)
	FileWrite('link.txt', $oLink.InnerText & @CRLF)
	FileWrite('link.txt', $oLink.href & @CRLF)
Next
_IEQuit($oIE)

_FileReadToArray("link.txt", $aRecords)
$Lines = _ArrayToString($aRecords, '|', 1)
$Form1 = GUICreate("Бла Бла", 850, 90, 483, 253)
$Combo1 = GUICtrlCreateCombo("", 8, 26, 750, 25)
GUICtrlSetData($Combo1, $Lines)
$Button1 = GUICtrlCreateButton("скачать", 760, 55, 60, 25)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			$save_file = FileSaveDialog('', '', '(*.doc)')
			$hDownload = InetGet(GUICtrlRead($Combo1), $save_file & '.doc', 1, 1)
			Do
				Sleep(250)
			Until InetGetInfo($hDownload, 2)
			Local $aData = InetGetInfo($hDownload)
			InetClose($hDownload)
			MsgBox(0, "", "Количество прочитанных байт: " & $aData[0] & @CRLF & "Размер: " & $aData[1])
	EndSwitch
WEnd
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Все просто :smile::
Код:
#include <IE.au3>

$oIE = _IECreate('http://fs.rts.ru/files/2892',0,1)
    _IELoadWait ($oIE)
    $oLinks = _IELinkGetCollection($oIE)
    For $oLink in $oLinks
        ConsoleWrite(_IEPropertyGet($oLink, "innerText") & @CRLF)
        if StringInStr(_IEPropertyGet($oLink, "innerText"), "Правила совершения") > 0 Then
			Send('{LCTRL DOWN}')
            _IEAction($oLink, "click")
			Send('{LCTRL UP}')
            while not WinExists("Загрузка файлов")
                Sleep(1000)
            WEnd
        endif
    Next
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
Zaramot
оба варианта - твой и из первого поста у меня срабатывают одинаково: запуск браузера и появляется предложение сохранить ( у меня вынь 7 с IE9).
 
Автор
K

k37

Новичок
Сообщения
2
Репутация
0
Последний вариант работает прекрасно! Только периодически не срабатывает
Код:
Send('{LCTRL UP}')

Как гарантированно отключить
Код:
Send('{LCTRL DOWN}')

Я пробовал просто
Код:
Send('{LCTRL DOWN}')
		    Sleep(1000)
            Send('{LCTRL UP}')
		    Sleep(1000)
            Send('{LCTRL UP}')
		    Sleep(1000)
            Send('{LCTRL UP}')

Но тут контрол оставался нажатым всегда. Подскажите пожалуйста как его отключить?
 
Верх