Что нового

[Автоматизация] Взаимодействие с application/x-shockwave-flash на странице IE

ivsatel

Продвинутый
Сообщения
319
Репутация
84
На странице http://101.ru/ если войти к примеру http://101.ru/?an=port_channel_mp3&channel=169 появляется объект application/x-shockwave-flash (плеер)
Хочу регулировать громкость у плеера. Как это реализовать?
Вот код:
Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <IE.au3>

Global $aTextSourseChanel, $aTextHrefChanel, $tNameSourseChan, $oIE, $oSubmit, $aNameArtist, $sURLChanel, $sHTML
Global $tText = BinaryToString(InetRead('http://101.ru/', 1))
Global $aChanelsHref = StringRegExp($tText, '[\<]a class[\=]"image" href[\=]"(.*?)"[\>][\<]img src[\=]"/proxy/design/images/indblock.*?" alt[\=]".*?101.ru"[\>][\<]span class[\=]"cover"[\>][\<][\/]span[\>][\<][\/]a[\>]', 3)
Global $aChanelsName = StringRegExp($tText, '[\<]a class[\=]"image" href[\=]"[\/][\?]an=port[\_]groupchannels[\&]group=\d+"><img src=".*?[\_]\d+/.*?[\=]\d+" alt="(.*?)"[\>][\<]span class[\=]"cover"[\>][\<][\/]span[\>][\<][\/]a[\>]', 3)

Global $hGui = GUICreate("Радио 101-RU", 240, 230, -1, -1, $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
GUISetBkColor(0xFFFFFF, $hGui)
Global $Label1 = GUICtrlCreateLabel('Выберите канал', 10, 10, 150, 17)
Global $hComboChan = GUICtrlCreateCombo('', 10, 30, 220)
Global $Label2 = GUICtrlCreateLabel('Содержимое канала', 10, 55, 150, 17)
Global $hComboSourseChan = GUICtrlCreateCombo('', 10, 75, 220)

For $i = 0 To UBound($aChanelsName) - 1
	GUICtrlSetData($hComboChan, $aChanelsName[$i], '')
Next

Global $BattonPlay = GUICtrlCreateButton("Play", 10, 105, 220)
Global $BattonStop = GUICtrlCreateButton("Stop", 10, 130, 220)

Global $Label3 = GUICtrlCreateLabel('Громкость', 10, 165, 220, 17, $SS_CENTER)

Global $iSlider = GUICtrlCreateSlider(10, 190, 220, 20)
GUICtrlSetLimit($iSlider, 100, 0)
GUICtrlSetData($iSlider, 50)

GUISetState(@SW_SHOW, $hGui)

Global $oIE = _IECreate('', 0, 0)

While 1

    Switch GUIGetMsg()

		Case $GUI_EVENT_CLOSE

			If IsArray($aTextSourseChanel) Or IsArray($aTextHrefChanel) Then
				_IEQuit ($oIE)
			EndIf
			Exit

		Case 4

			For $i = 0 To UBound($aChanelsName)-1
				If GUICtrlRead($hComboChan) = $aChanelsName[$i] Then
					$aTextSourseChanel = StringRegExp(BinaryToString(InetRead('http://101.ru'&$aChanelsHref[$i], 1)), '[\<]a class[\=]"image" href[\=]".*?"[\>][\<]img src[\=]".*?" alt[\=]"(.*?)"[\>]', 3)
						If Not IsArray($aTextSourseChanel) Then MsgBox('','1', @error)
					$aTextHrefChanel = StringRegExp(BinaryToString(InetRead('http://101.ru'&$aChanelsHref[$i], 1)), '[\<]a class="image" href="(.*?)"><img src="[\/]proxy[\/]modules[\/]channel[\/]dynamics[\/].*?" alt="Станция.*?ru"></a>', 3)
						If Not IsArray($aTextHrefChanel) Then MsgBox('','2', @error)
				EndIf
			Next

			GUICtrlSetData($hComboSourseChan, '', '')

			For $i = 0 To UBound($aTextSourseChanel) - 1
				GUICtrlSetData($hComboSourseChan, $aTextSourseChanel[$i]&'|')	; Имена станций
			Next

		Case 7
			If Not IsArray($aTextSourseChanel) Or Not IsArray($aTextHrefChanel) Or GUICtrlRead($hComboSourseChan) = '' Then
				MsgBox('','ERROR', 'Выберите канал и содержимое канала')
			Else
				_PlayStation()
			EndIf

		Case 8
			If Not IsArray($aTextSourseChanel) Or Not IsArray($aTextHrefChanel) Or GUICtrlRead($hComboSourseChan) = '' Then
				MsgBox('','ERROR', 'Выберите канал и содержимое канала')
			Else
				_StopPlayStation()
			EndIf
		Case $iSlider
			_Volum()
    EndSwitch
WEnd

Func _PlayStation()
	For $i = 0 To UBound($aTextSourseChanel)-1
		If GUICtrlRead($hComboSourseChan) = $aTextSourseChanel[$i] Then
			$sURLChanel = $aTextHrefChanel[$i]
			_IENavigate($oIE, 'http://101.ru'&$sURLChanel)
			$oSubmit = _IEGetObjByID ($oIE, "player_radioplayer_sm")
			;_IEAction ($oSubmit, "click")
		EndIf
	Next
EndFunc

Func _Volum()

	Dim $aInstance[5]

	$hWnd = WinWait("[CLASS:IEFrame]", "", 5)
	If Not $hWnd Then
		MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
		Exit
	EndIf

	For $i = 1 To 5
		$hControl = ControlGetHandle($hWnd, '', '[CLASS:Internet Explorer_Server; INSTANCE:'&$i&']')
		If $hControl <> '' Then
			$aInstance[$i] = '[CLASS:Internet Explorer_Server; INSTANCE:'&$i&']'
		Else
			ExitLoop 1
		EndIf
	Next

	_ArraySort($aInstance)

	$Coord = GUICtrlRead($iSlider)
	ControlClick ( "[CLASS:IEFrame]", "", $aInstance[UBound($aInstance)-1], "main", 1, ($Coord*0.75)+740, 173 )
EndFunc

Func _StopPlayStation()
	$oSubmit = _IEGetObjByID($oIE, "player_radioplayer_sm")
	_IEAction($oSubmit, "click")
EndFunc

GUIDelete($hGui)
Соответственно при изменении разрешения экрана регулировка громкости "ломается".
 
Автор
I

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Это вообще возможно? Если возможно то куда копать?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
ivsatel [?]
Это вообще возможно? Если возможно то куда копать?
1. Возможно, если вы заложили такую возможность в player.swf плеер.
2. Возможно (при определённых ограничениях), если вы владеете контейнером Flash в своём приложении.
3. Возможно, если вы посредством использования COM/OLE в IE используете JS функции для работы с Flash объектом.
 
Автор
I

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Garrett, Спасибо за ответ! Решение оказалось под носом!!! Они используют Uppod Player.
К нему есть документация http://uppod.ru/help/js/
Прочтя которую получилось следующее:
Изменение громкости:
Код:
Func _Volum()

    $Coord = GUICtrlRead($iSlider)
	$oIE.document.getElementById('radioplayer_sm').sendToUppod('v'&$Coord)

EndFunc

Остановка:
Код:
Func _StopPlayStation()
    $oIE.document.getElementById('radioplayer_sm').sendToUppod('stop')
EndFunc

Ну и все вместе:
Код:
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

Opt('TrayMenuMode', 1)
Opt('MustDeclareVars', 1)
Opt('GUICloseOnESC', 1)

Global $aTextSourseChanel, $aTextHrefChanel, $tNameSourseChan, $oIE, $oSubmit, $aNameArtist, $sURLChanel, $sHTML, $sInetread2, $sInetread3, $iNavCount, $Coord, _
		$TrayRestoreItem, $TrayExitItem, $TrayMsg, $HexNumber

$TrayRestoreItem = TrayCreateItem('Развернуть')
TrayItemSetState(-1, $TRAY_DEFAULT)
TrayCreateItem('')
$TrayExitItem = TrayCreateItem('Выход')
TraySetClick(8)

Global $sInetread1 = InetRead('http://101.ru/', 1)
Global $tText = BinaryToString($sInetread1)
InetClose($sInetread1)
Global $aChanelsHref = StringRegExp($tText, '[\<]a class[\=]"image" href[\=]"(.*?)"[\>][\<]img src[\=]"/proxy/design/images/indblock.*?" alt[\=]".*?101.ru"[\>][\<]span class[\=]"cover"[\>][\<][\/]span[\>][\<][\/]a[\>]', 3)
Global $aChanelsName = StringRegExp($tText, '[\<]a class[\=]"image" href[\=]"[\/][\?]an=port[\_]groupchannels[\&]group=\d+"><img src=".*?[\_]\d+/.*?[\=]\d+" alt="(.*?)"[\>][\<]span class[\=]"cover"[\>][\<][\/]span[\>][\<][\/]a[\>]', 3)

Global $hGui = GUICreate("Радио 101-RU", 240, 230, -1, -1, $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
GUISetBkColor(0xFFFFFF, $hGui)
Global $Label1 = GUICtrlCreateLabel('Выберите канал', 10, 10, 150, 17)
Global $hComboChan = GUICtrlCreateCombo('', 10, 30, 220)
Global $Label2 = GUICtrlCreateLabel('Содержимое канала', 10, 55, 150, 17)
Global $hComboSourseChan = GUICtrlCreateCombo('', 10, 75, 220)

For $i = 0 To UBound($aChanelsName) - 1
	GUICtrlSetData($hComboChan, $aChanelsName[$i], '')
Next

Global $BattonPlay = GUICtrlCreateButton("Play", 10, 105, 220)
Global $BattonStop = GUICtrlCreateButton("Stop", 10, 130, 220)

Global $Label3 = GUICtrlCreateLabel('Громкость', 10, 165, 220, 17, $SS_CENTER)

Global $iSlider = GUICtrlCreateSlider(10, 190, 220, 20)
GUICtrlSetLimit($iSlider, 100, 0)
GUICtrlSetData($iSlider, 50)

GUISetState(@SW_SHOW, $hGui)

Global $oIE = _IECreate('http://101.ru', 0, 0)

While 1

	$TrayMsg = TrayGetMsg()
	Switch $TrayMsg
		Case $TrayRestoreItem
			GUISetState(@SW_SHOW, $hGui)
			GUISetState(@SW_RESTORE, $hGui)
			TraySetState(2)
		Case $TrayExitItem
			If IsArray($aTextSourseChanel) Or IsArray($aTextHrefChanel) Then
				_IEQuit($oIE)
			EndIf
			Exit
	EndSwitch

	Switch GUIGetMsg()

		Case $GUI_EVENT_CLOSE

			If IsArray($aTextSourseChanel) Or IsArray($aTextHrefChanel) Then
				_IEQuit($oIE)
			EndIf
			Exit

		Case $GUI_EVENT_CLOSE
			ExitLoop

		Case $GUI_EVENT_MINIMIZE
			GUISetState(@SW_HIDE, $hGui)
			TraySetState(1)

		Case $hComboSourseChan

			$iNavCount = 'Stop'

		Case $hComboChan

			$iNavCount = 'Stop'

			For $i = 0 To UBound($aChanelsName) - 1
				If GUICtrlRead($hComboChan) = $aChanelsName[$i] Then
					$sInetread2 = InetRead('http://101.ru' & $aChanelsHref[$i], 1)
					$aTextSourseChanel = StringRegExp(BinaryToString($sInetread2), '[\<]a class[\=]"image" href[\=]".*?"[\>][\<]img src[\=]".*?" alt[\=]"(.*?)"[\>]', 3)
					InetClose($sInetread2)
					If Not IsArray($aTextSourseChanel) Then MsgBox('', '1', @error)
					$sInetread3 = InetRead('http://101.ru' & $aChanelsHref[$i], 1)
					$aTextHrefChanel = StringRegExp(BinaryToString($sInetread3), '[\<]a class="image" href="(.*?)"><img src="[\/]proxy[\/]modules[\/]channel[\/]dynamics[\/].*?" alt="Станция.*?ru"></a>', 3)
					InetClose($sInetread3)
					If Not IsArray($aTextHrefChanel) Then MsgBox('', '2', @error)
				EndIf
			Next

			GUICtrlSetData($hComboSourseChan, '', '')

			For $i = 0 To UBound($aTextSourseChanel) - 1
				GUICtrlSetData($hComboSourseChan, $aTextSourseChanel[$i] & '|') ; Имена станций
			Next

		Case $BattonPlay

			If Not IsArray($aTextSourseChanel) Or Not IsArray($aTextHrefChanel) Or GUICtrlRead($hComboSourseChan) = '' Then
				MsgBox('', 'ERROR', 'Выберите канал и содержимое канала')
			Else
				_PlayStation()
			EndIf

		Case $BattonStop

			If Not IsArray($aTextSourseChanel) Or Not IsArray($aTextHrefChanel) Or GUICtrlRead($hComboSourseChan) = '' Then
				MsgBox('', 'ERROR', 'Выберите канал и содержимое канала')
			Else
				_StopPlayStation()
				$iNavCount = 'Stop'
			EndIf

		Case $iSlider
			If Not IsArray($aTextSourseChanel) Or Not IsArray($aTextHrefChanel) Or GUICtrlRead($hComboSourseChan) = '' Then
				ContinueLoop
			Else
				_Volum()
			EndIf
	EndSwitch
WEnd

Func _PlayStation()

	If $iNavCount = 'Play' Then
		Return
	Else
		If _IEPropertyGet($oIE, 'locationurl') = 'http://101.ru' & $sURLChanel Then
			$oIE.document.getElementById('radioplayer_sm').sendToUppod('play')
		Else
			For $i = 0 To UBound($aTextSourseChanel) - 1
				If GUICtrlRead($hComboSourseChan) = $aTextSourseChanel[$i] Then
					$sURLChanel = $aTextHrefChanel[$i]
					_IENavigate($oIE, 'http://101.ru' & $sURLChanel)
					_IELoadWait($oIE)
				EndIf
				$iNavCount = 'Play'
			Next
		EndIf
	EndIf

EndFunc   ;==>_PlayStation

Func _Volum()

	$Coord = GUICtrlRead($iSlider)
	$oIE.document.getElementById('radioplayer_sm').sendToUppod('v' & $Coord)

EndFunc   ;==>_Volum

Func _StopPlayStation()

	$oIE.document.getElementById('radioplayer_sm').sendToUppod('stop')

EndFunc   ;==>_StopPlayStation

GUIDelete($hGui)
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
ivsatel
Отлично получилось. Вот только столкнулся с проблемой.. Включил радио, оно начало играть, затем еще раз нажал на пуск.. в итоге радио играет, а программа закрылась с ошибкой
Код:
$oIE.document.getElementById('radioplayer_sm').sendToUppod('play')^ ERROR
 
Автор
I

ivsatel

Продвинутый
Сообщения
319
Репутация
84
DarWiM [?]
Включил радио, оно начало играть, затем еще раз нажал на пуск..
Я пока до этого этапа не дошел) В процессе. Как допишу, так обновлю тут код.

Обновил:
Код:
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

Opt('TrayMenuMode', 1)
Opt('MustDeclareVars', 1)
Opt('GUICloseOnESC', 1)

Global $aTextSourseChanel, $aTextHrefChanel, $tNameSourseChan, $oIE, $oSubmit, $aNameArtist, $sURLChanel, $sHTML, $sInetread2, $sInetread3, $iNavCount, $Coord, _
		$TrayRestoreItem, $TrayExitItem, $TrayMsg, $HexNumber

$TrayRestoreItem = TrayCreateItem('Развернуть')
TrayItemSetState(-1, $TRAY_DEFAULT)
TrayCreateItem('')
$TrayExitItem = TrayCreateItem('Выход')
TraySetClick(8)

Global $sInetread1 = InetRead('http://101.ru/', 1)
Global $tText = BinaryToString($sInetread1)
InetClose($sInetread1)
Global $aChanelsHref = StringRegExp($tText, '[\<]a class[\=]"image" href[\=]"(.*?)"[\>][\<]img src[\=]"/proxy/design/images/indblock.*?" alt[\=]".*?101.ru"[\>][\<]span class[\=]"cover"[\>][\<][\/]span[\>][\<][\/]a[\>]', 3)
Global $aChanelsName = StringRegExp($tText, '[\<]a class[\=]"image" href[\=]"[\/][\?]an=port[\_]groupchannels[\&]group=\d+"><img src=".*?[\_]\d+/.*?[\=]\d+" alt="(.*?)"[\>][\<]span class[\=]"cover"[\>][\<][\/]span[\>][\<][\/]a[\>]', 3)

Global $hGui = GUICreate("Радио 101-RU", 240, 230, -1, -1, $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
GUISetBkColor(0xFFFFFF, $hGui)
Global $Label1 = GUICtrlCreateLabel('Выберите канал', 10, 10, 150, 17)
Global $hComboChan = GUICtrlCreateCombo('', 10, 30, 220)
Global $Label2 = GUICtrlCreateLabel('Содержимое канала', 10, 55, 150, 17)
Global $hComboSourseChan = GUICtrlCreateCombo('', 10, 75, 220)

For $i = 0 To UBound($aChanelsName) - 1
	GUICtrlSetData($hComboChan, $aChanelsName[$i], '')
Next

Global $BattonPlay = GUICtrlCreateButton("Play", 10, 105, 220)
Global $BattonStop = GUICtrlCreateButton("Stop", 10, 130, 220)

Global $Label3 = GUICtrlCreateLabel('Громкость', 10, 165, 220, 17, $SS_CENTER)

Global $iSlider = GUICtrlCreateSlider(10, 190, 220, 20)
GUICtrlSetLimit($iSlider, 100, 0)
GUICtrlSetData($iSlider, 50)

GUISetState(@SW_SHOW, $hGui)

Global $oIE = _IECreate('http://101.ru', 0, 0)

While 1

	$TrayMsg = TrayGetMsg()
	Switch $TrayMsg
		Case $TrayRestoreItem
			GUISetState(@SW_SHOW, $hGui)
			GUISetState(@SW_RESTORE, $hGui)
			TraySetState(2)
		Case $TrayExitItem
			If IsArray($aTextSourseChanel) Or IsArray($aTextHrefChanel) Then
				_IEQuit($oIE)
			EndIf
			Exit
	EndSwitch

	Switch GUIGetMsg()

		Case $GUI_EVENT_CLOSE

			If IsArray($aTextSourseChanel) Or IsArray($aTextHrefChanel) Then
				_IEQuit($oIE)
			EndIf
			Exit

		Case $GUI_EVENT_CLOSE
			ExitLoop

		Case $GUI_EVENT_MINIMIZE
			GUISetState(@SW_HIDE, $hGui)
			TraySetState(1)

		Case $hComboSourseChan

			$iNavCount = 'Stop'

		Case $hComboChan

			$iNavCount = 'Stop'

			For $i = 0 To UBound($aChanelsName) - 1
				If GUICtrlRead($hComboChan) = $aChanelsName[$i] Then
					$sInetread2 = InetRead('http://101.ru' & $aChanelsHref[$i], 1)
					$aTextSourseChanel = StringRegExp(BinaryToString($sInetread2), '[\<]a class[\=]"image" href[\=]".*?"[\>][\<]img src[\=]".*?" alt[\=]"(.*?)"[\>]', 3)
					InetClose($sInetread2)
					If Not IsArray($aTextSourseChanel) Then MsgBox('', '1', @error)
					$sInetread3 = InetRead('http://101.ru' & $aChanelsHref[$i], 1)
					$aTextHrefChanel = StringRegExp(BinaryToString($sInetread3), '[\<]a class="image" href="(.*?)"><img src="[\/]proxy[\/]modules[\/]channel[\/]dynamics[\/].*?" alt="Станция.*?ru"></a>', 3)
					InetClose($sInetread3)
					If Not IsArray($aTextHrefChanel) Then MsgBox('', '2', @error)
				EndIf
			Next

			GUICtrlSetData($hComboSourseChan, '', '')

			For $i = 0 To UBound($aTextSourseChanel) - 1
				GUICtrlSetData($hComboSourseChan, $aTextSourseChanel[$i] & '|') ; Имена станций
			Next

		Case $BattonPlay

			If Not IsArray($aTextSourseChanel) Or Not IsArray($aTextHrefChanel) Or GUICtrlRead($hComboSourseChan) = '' Then
				MsgBox('', 'ERROR', 'Выберите канал и содержимое канала')
			Else
				_PlayStation()
			EndIf

		Case $BattonStop

			If Not IsArray($aTextSourseChanel) Or Not IsArray($aTextHrefChanel) Or GUICtrlRead($hComboSourseChan) = '' Then
				MsgBox('', 'ERROR', 'Выберите канал и содержимое канала')
			Else
				_StopPlayStation()
				$iNavCount = 'Stop'
			EndIf

		Case $iSlider
			If Not IsArray($aTextSourseChanel) Or Not IsArray($aTextHrefChanel) Or GUICtrlRead($hComboSourseChan) = '' Then
				ContinueLoop
			Else
				_Volum()
			EndIf
	EndSwitch
WEnd

Func _PlayStation()

	If $iNavCount = 'Play' Then
		Return
	Else
		If _IEPropertyGet($oIE, 'locationurl') = 'http://101.ru' & $sURLChanel Then
			$oIE.document.getElementById('radioplayer_sm').sendToUppod('play')
		Else
			For $i = 0 To UBound($aTextSourseChanel) - 1
				If GUICtrlRead($hComboSourseChan) = $aTextSourseChanel[$i] Then
					$sURLChanel = $aTextHrefChanel[$i]
					_IENavigate($oIE, 'http://101.ru' & $sURLChanel)
					_IELoadWait($oIE)
				EndIf
				$iNavCount = 'Play'
			Next
		EndIf
	EndIf

EndFunc   ;==>_PlayStation

Func _Volum()

	$Coord = GUICtrlRead($iSlider)
	$oIE.document.getElementById('radioplayer_sm').sendToUppod('v' & $Coord)

EndFunc   ;==>_Volum

Func _StopPlayStation()

	$oIE.document.getElementById('radioplayer_sm').sendToUppod('stop')

EndFunc   ;==>_StopPlayStation

GUIDelete($hGui)
 
Верх