Что нового

Как послать "Tab" и ""Enter" в скрытое окно интернет эксплорера?

forfrends

Новичок
Сообщения
176
Репутация
3
Добрый день!
Помогите решить проблему:
Я создаю окно Интернет Эксплорера командой:
Код:
$oIE = _IECreate('http://site.ru', 0, 0, 1, 0)

мне нужно послать в загрузившийся сайт несколько табов и ентер. Как это сделать?
Обычный Send не работает если окно скрыто.
Что можно сделать?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
forfrends [?]
Обычный Send не работает если окно скрыто.
ControlSend должен сработать.

P.S
Я уверен что можно обойтись функциями _IE*.
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
По справке я не понял как с помощью ControlSend можно постать Таб
А какими фанкциями _IE можно воспользоваться? Можно пример?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
forfrends [?]
А какими фанкциями _IE можно воспользоваться? Можно пример?
Вы напишите, что Вы хотите сделать на странице и дайте ссылку на нее или на похожую.
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Класс окна и титул вытащил через http://autoit-script.ru/index.php?topic=4359.msg31527#msg31527


Код:
#include <IE.au3>
$URL = _IECreate("http://www.ssyoutube.com/watch?v=jPj7klRF1j0")
sleep(10000)
$oSubmit = _IEGetObjByName ($URL, "sf_url") ; Если ссылка найдена, то фокус на поле для ввода и 2 Таба и мы на первой ссылке с как правило лучшим качеством
_IEAction($oSubmit, "Focus")
ControlSend( "Скачать YouTube видео бесплатно - Windows Internet Explorer", "", "[CLASS:Internet Explorer_Server; INSTANCE:1]", "{TAB 2}", 0)
sleep(100)
ControlSend( "Скачать YouTube видео бесплатно - Windows Internet Explorer", "", "[CLASS:Internet Explorer_Server; INSTANCE:1]", "{ENTER}", 0)

По справке я не понял как с помощью ControlSend можно постать Таб
В конце есть флаг 0/1... когда 0 можно отправлять {TAb} и т.д.

P.S. Окно должно быть неактивно. В свернутое не отправляется. Если нужно убрать из зоны видимости, то через WinMove и координаты указать по 9999 и т.д. Также после любого {TAB}{ENTER} в неактивное окно, оно активируется.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
forfrends
Вот Вам пример с функциями _IE***. Проверял на IE8.
Код:
#include <IE.au3>

$sUrl = 'http://ru.savefrom.net/'
$sTextUrl = 'http://youtube.com/watch?v=jPj7klRF1j0'
$sUrlFLV = ''
$sUrlMP4 = ''

;$oIE = _IECreate($sUrl);окно IE будет видно
$oIE = _IECreate($sUrl, 0, 0);окно IE будет скрыто
$oInput = _IEGetObjById($oIE, 'sf_url')
$oSubmit = _IEGetObjById($oIE, 'sf_submit')
_IEFormElementSetValue($oInput, $sTextUrl)
_IEAction($oSubmit, 'click')
_IELoadWait($oIE)

$iStart = TimerInit()
While 1
	$oUrls = _IETagNameGetCollection($oIE, 'a')
	For $oUrl In $oUrls
		ConsoleWrite($oUrl.innertext & ' - ' & $oUrl.href & @CR)
		If $oUrl.innertext == 'FLV' Then
			$sUrlFLV = $oUrl.href
			ExitLoop
		EndIf
	Next
	For $oUrl In $oUrls
		ConsoleWrite($oUrl.innertext & ' - ' & $oUrl.href & @CR)
		If $oUrl.innertext == 'MP4' Then
			$sUrlMP4 = $oUrl.href
			ExitLoop
		EndIf
	Next
	If $sUrlFLV And $sUrlMP4 Then ExitLoop
	If TimerDiff($iStart) > 20000 Then
		MsgBox(16, 'Error', 'Время вышло')
		_IEQuit($oIE)
		Exit
	EndIf
	Sleep(500)
WEnd
_IEQuit($oIE)
MsgBox(64, 'Info', 'FLV: ' & $sUrlFLV & @LF & 'MP4: ' & $sUrlMP4)

$hDownloadMP4 = InetGet($sUrlMP4, @ScriptDir & '\File.mp4', 1, 1)
$hDownloadFLV = InetGet($sUrlFLV, @ScriptDir & '\File.flv', 1, 1)
Do
	ConsoleWrite('File.mp4  скачано: ' & InetGetInfo($hDownloadMP4, 0) & ' b' & @CR)
	ConsoleWrite('File.flv  скачано: ' & InetGetInfo($hDownloadFLV, 0) & ' b' & @CR)
	Sleep(50)
Until InetGetInfo($hDownloadMP4, 2) And InetGetInfo($hDownloadFLV, 2)
$nBytesMP4 = InetGetInfo($hDownloadMP4, 0)
$nBytesFLV = InetGetInfo($hDownloadFLV, 0)
InetClose($hDownloadMP4)
InetClose($hDownloadFLV)
MsgBox(64, 'Info', 'File.mp4: ' & $nBytesMP4 & ' b' & @LF & _
		'File.flv: ' & $nBytesFLV & ' b')
А так можно попробовать и имена файлов получить.
Код:
#include <IE.au3>
#include <Encoding.au3>

$sUrl = 'http://ru.savefrom.net/'
$sTextUrl = 'http://youtube.com/watch?v=jPj7klRF1j0'
$sUrlFLV = ''
$sUrlMP4 = ''

;$oIE = _IECreate($sUrl);окно IE будет видно
$oIE = _IECreate($sUrl, 0, 0);окно IE будет скрыто
$oInput = _IEGetObjById($oIE, 'sf_url')
$oSubmit = _IEGetObjById($oIE, 'sf_submit')
_IEFormElementSetValue($oInput, $sTextUrl)
_IEAction($oSubmit, 'click')
_IELoadWait($oIE)

$iStart = TimerInit()
While 1
	$oUrls = _IETagNameGetCollection($oIE, 'a')
	For $oUrl In $oUrls
		ConsoleWrite($oUrl.innertext & ' - ' & $oUrl.href & @CR)
		If $oUrl.innertext == 'FLV' Then
			$sUrlFLV = $oUrl.href
			ExitLoop
		EndIf
	Next
	For $oUrl In $oUrls
		ConsoleWrite($oUrl.innertext & ' - ' & $oUrl.href & @CR)
		If $oUrl.innertext == 'MP4' Then
			$sUrlMP4 = $oUrl.href
			ExitLoop
		EndIf
	Next
	If $sUrlFLV And $sUrlMP4 Then ExitLoop
	If TimerDiff($iStart) > 20000 Then
		MsgBox(16, 'Error', 'Время вышло')
		_IEQuit($oIE)
		Exit
	EndIf
	Sleep(500)
WEnd
_IEQuit($oIE)
MsgBox(64, 'Info', 'FLV: ' & $sUrlFLV & @LF & 'MP4: ' & $sUrlMP4)
If Not StringInStr($sUrlFLV, '%') Then
	$oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
	$oHTTP.Open('GET', $sUrlFLV)
	$oHTTP.SetRequestHeader('User-Agent', 'AutoIt')
	$oHTTP.SetRequestHeader('Host', 'savefrom.net')
	$oHTTP.SetRequestHeader('Cache-Control', 'no-cache')
	$oHTTP.Send('')
	$oHTTP.WaitForResponse
	$sHeader = $oHTTP.GetAllResponseHeaders
	$sFLV = $oHTTP.ResponseBody
	$sFileNameFLV = _Encoding_CyrillicTo1251(StringRegExpReplace($sHeader, '(?s).*?filename="(.*?flv)"?.*', '\1'))
	$hFile = FileOpen(@ScriptDir & '\' & $sFileNameFLV, 18)
	FileWrite($hFile, $sFLV)
	FileClose($hFile)

	$oHTTP.Open('GET', $sUrlMP4)
	$oHTTP.SetRequestHeader('User-Agent', 'AutoIt')
	$oHTTP.SetRequestHeader('Host', 'savefrom.net')
	$oHTTP.SetRequestHeader('Cache-Control', 'no-cache')
	$oHTTP.Send('')
	$oHTTP.WaitForResponse
	$sHeader = $oHTTP.GetAllResponseHeaders
	$sMP4 = $oHTTP.ResponseBody
	$sFileNameMP4 = _Encoding_CyrillicTo1251(StringRegExpReplace($sHeader, '(?s).*?filename="(.*?mp4)"?.*', '\1'))
	$hFile = FileOpen(@ScriptDir & '\' & $sFileNameMP4, 18)
	FileWrite($hFile, $sMP4)
	FileClose($hFile)
	MsgBox(64, 'Info', $sFileNameFLV & @LF & $sFileNameMP4)
	Exit
Else
	$sFileNameFLV = 'File.flv'
	$sFileNameMP4 = 'File.mp4'
EndIf

$hDownloadMP4 = InetGet($sUrlMP4, @ScriptDir & '\' & $sFileNameMP4, 1, 1)
$hDownloadFLV = InetGet($sUrlFLV, @ScriptDir & '\' & $sFileNameFLV, 1, 1)
Do
	ConsoleWrite($sFileNameMP4 & ' скачано: ' & InetGetInfo($hDownloadMP4, 0) & ' b' & @CR)
	ConsoleWrite($sFileNameFLV & ' скачано: ' & InetGetInfo($hDownloadFLV, 0) & ' b' & @CR)
	Sleep(250)
Until InetGetInfo($hDownloadMP4, 2) And InetGetInfo($hDownloadFLV, 2)
$nBytesMP4 = InetGetInfo($hDownloadMP4, 0)
$nBytesFLV = InetGetInfo($hDownloadFLV, 0)
InetClose($hDownloadMP4)
InetClose($hDownloadFLV)
MsgBox(64, 'Info', $sFileNameMP4 & ': ' & $nBytesMP4 & ' b' & @LF & $sFileNameFLV & ': ' & $nBytesFLV & ' b')
Encoding.au3
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
Спасибо!
Через
ControlSend( "Скачать YouTube видео бесплатно - Windows Internet Explorer", "", "[CLASS:Internet
Код:
ControlSend( "Скачать YouTube видео бесплатно - Windows Internet Explorer", "", "[CLASS:Internet Explorer_Server; INSTANCE:1]", "{TAB 2}", 0)

сработало то что надо!
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
madmasles
Работает для youtube.com. И не работает для vimeo.ru.
Код:
$sTextUrl = "http://www.vimeo.com/21294655"


При клике ЛКМ мыши идет открытие вместо скачивания. При ПКМ/"Сохранить как" идет скачивание... Как бы это доработать?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
zlo-kazan [?]
Работает для youtube.com. И не работает для vimeo.ru
У меня первый вариант с этой ссылкой работает.

При клике ЛКМ мыши идет открытие вместо скачивания. При ПКМ/"Сохранить как" идет скачивание... Как бы это доработать?
Эту фразу я не совсем понял. Про какие клики идет речь?
ИМХО, на сервисе http://ru.savefrom.net/ надо анализировать каждый файлообменник, медиахостинг и т.д. как они формируют ссылки на них.

Можно ссылки просто собрать, например в файл.

Из ссылки на http://www.vimeo.com/21294655 получить имена файлов можно так
Код:
$sUrlFLV = 'http://av.vimeo.com/75249/558/43398346.mp4?token=1302423714_0c916a16eee3fdd4c78f3542d5dba8ee'
$sUrlMP4 = 'http://av.vimeo.com/33622/139/43406214.mp4?token=1302423714_dbecd7657be37ab47f74da9fb0af4988'

$sFileNameFLV = StringRegExpReplace($sUrlFLV, '^.*/(.*?)\?\w?.*', '\1')
$sFileNameMP4 = StringRegExpReplace($sUrlMP4, '^.*/(.*?)\?\w?.*', '\1')
MsgBox(64, 'Info', 'FLV: ' & $sFileNameFLV & @LF & 'MP4: ' & $sFileNameMP4)
 
Верх