Что нового

[Сеть, интернет] Как передать ссылку полученую в IE в inetGet

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Здравствуйте.
Использую AutoIt 3.3.8.1
Подскажите как передать ссылку на загрузку из IE в
Код:
InetGet

На этой странице http://www.oracle.com/technetwork/java/javase/downloads/jre7u9-downloads-1859586.html нужно в браузере нажать чекбокс "согласия" и после ссылка становится доступной. Я использую такой скрипт:
Код:
#include <WinAPIEx.au3>
#include <IE.au3>

If @OSArch = 'X64' Then
	$HKLM = 'HKLM64'
Else
	$HKLM = 'HKLM'
EndIf

;#####################################################Получение имени кнопки на странице с JAVA
$A6 = StringRegExp(BinaryToString(InetRead('http://www.oracle.com/technetwork/java/javase/downloads/index.html', 1), 4), '(?i)Java SE 6 users upgrade to this release[\.] [\<]span class[\=]"bluearrows"[\>][\<]a href[\=]"(.*?)" target[\=]""[\>]Learn more', 3)
If @error Then
	$B6 = '0'
Else
	$B6 = 'http://www.oracle.com'&$A6[0]
EndIf

$C6 = StringRegExp(BinaryToString(InetRead($B6, 1), 4), '(?i)Current Version[\<]/strong[\>] [\<]ul[\>]\s+[\<]li[\>][\<]a href=".*"[\>]Changes in (.*?)[\<]/a[\>][\<]/li[\>] [\<]/ul[\>] [\<]strong[\>]Earlier', 3)
If @error Then
	$D6 = '0'
Else
	$D6 = $C6[0]
	$Da6 = StringRegExpReplace($D6, '...', '')
EndIf

$A7 = StringRegExp(BinaryToString(InetRead('http://www.oracle.com/technetwork/java/javase/downloads/index.html', 1), 4), '(?i)Mac and Linux x86/x64[\.][\<]br /[\>]\s+[\<]span class[\=]"bluearrows"[\>][\<]a href[\=]"(.*?)" target[\=]""[\>]Learn more', 3)
If @error Then
	$B7 = '0'
Else
	$B7 = 'http://www.oracle.com'&$A7[0]
EndIf

$C7 = StringRegExp(BinaryToString(InetRead($B7, 1), 4), '(?i)Current Version.*<ul>\s+<li><a href=".*" target="">Changes in.*[\_](.*?)[\<].*Earlier', 3)
If @error Then
	$D7 = '0'
Else
	$D7 = $C7[0]
	$Da7 = StringRegExpReplace($D7, '^0', '')
EndIf

$agreement6 = 'agreementFormjdk-6u'&$Da6&'-oth-JPR'
$agreement7 = 'agreementFormjdk-7u'&$Da7&'-oth-JPR'

;Получение адресов на страницу загрузки ЯВА
$UrlD7 = StringRegExp(BinaryToString(InetRead('http://www.oracle.com/technetwork/java/javase/downloads/index.html', 1), 4), '(?i)JRE</h.*<div align="center"><a href="(.*?)" target=""><img border=.*public', 3)
If @error Then
	$UForeIE7 = '0'
Else
	$UForeIE7 = 'http://www.oracle.com'&$UrlD7[0]
EndIf

$UrlD6 = StringRegExp(BinaryToString(InetRead('http://www.oracle.com/technetwork/java/javase/downloads/index.html', 1), 4), '(?i)target="" href="(.*?)"[\>][\<]img border[\=]".*public/[\@]ocom/documents/digitalasset/1612430.*Download JRE.*JRE 6 Docs', 3)
If @error Then
	$UForeIE6 = '0'
Else
	$UForeIE6 = 'http://www.oracle.com'&$UrlD6[0]
EndIf
;Получение адресов на страницу загрузки ЯВА

;#####################################################Получение имени кнопки на странице с JAVA

_7()

;--------------------Функция загрузки Java SE Runtime Environment
Func _7()
;Для 7-й версии явы
If RegRead($HKLM&"\SOFTWARE\JavaSoft\Java Runtime Environment", "CurrentVersion") = '1.7' Then
Local $oIE = _IECreate ($UForeIE7, 0, 0)
_IELoadWait ($oIE)
ClickById($oIE, $agreement7)
	$UrlZagJRE7 = StringRegExp(BinaryToString(InetRead('http://www.oracle.com/technetwork/java/javase/downloads/index.html', 1), 4), '(?i)center"[\>]JRE[\<]/h3[\>]\s+[\<]div align[\=]"center"[\>][\<]a href[\=]"(.*?)" target', 3)
		If @error Then
			$SourseUrl7 = '0'
		Else
			$SourseUrl7 = 'http://www.oracle.com'&$UrlZagJRE7[0]
			If @OSArch <> 'X64' Then
				$UrlJRE7 = StringRegExp(BinaryToString(InetRead($SourseUrl7, 1), 4), '(?i)Windows x86 Offline"[\,] "size"[\:]"\d+.*MB"[\,]"filepath"[\:]"(.*?)"[\}]', 3)
				If @error Then
					$AdrJRE = '0'
				Else
					$AdrJRE = $UrlJRE7[0]
				EndIf
			Else
			$UrlJRE = StringRegExp(BinaryToString(InetRead($SourseUrl7, 1), 4), '(?i)(?i)Windows x64"[\,] "size"[\:]"\d+.*MB"[\,]"filepath"[\:]"(.*?)"[\}]', 3)
				If @error Then
					$AdrJRE = '0'
				Else
					$AdrJRE = $UrlJRE[0]
				ProgressOn('Скачивание', 'Java SE Runtime Environment', '0 %', -1, -1, 18)
				EndIf
			EndIf
ProgressOn('Скачивание', 'Java SE Runtime', '0 %', -1, -1, 18)
Local $hDownloadJAVA = InetGet($AdrJRE, @ScriptDir & '\Java SE.exe', 1, 1)
Do
    If InetGetInfo($hDownloadJAVA, 1) Then
        Local $iPersent = Round((InetGetInfo($hDownloadJAVA, 0) / InetGetInfo($hDownloadJAVA, 1)) * 100)
        ProgressSet($iPersent, $iPersent & ' %, ' & _WinAPI_StrFormatByteSize(InetGetInfo($hDownloadJAVA, 0)) _
		& ' (' & _WinAPI_StrFormatByteSize(InetGetInfo($hDownloadJAVA, 1)) & ')')
		TraySetState(1)
		TraySetToolTip('Java SE Runtime загружен на '&$iPersent&' %')
    EndIf
    Sleep(500)
Until InetGetInfo($hDownloadJAVA, 2)
InetClose($hDownloadJAVA)
ProgressOff()
_IEQuit ($oIE)
	EndIf
EndIf

;#############################################################################################
;Для 6-й версии явы
If RegRead($HKLM&"\SOFTWARE\JavaSoft\Java Runtime Environment", "CurrentVersion") = '1.6' Then
Local $oIE = _IECreate ($UForeIE6, 0, 0)
_IELoadWait ($oIE)
ClickById($oIE, $agreement6)
	$UrlZagJRE6 = StringRegExp(BinaryToString(InetRead('http://www.oracle.com/technetwork/java/javase/downloads/index.html', 1), 4), '(?i)Third Party Licenses[\<]/a[\>][\<]/li[\>].*Certified System Configurations[\<]/a[\>][\<]/li[\>].*JRE[\<]/h3[\>].*[\<]a target[\=]"" href[\=]"(.*?)"[\>]', 3)
	If @error Then
		$SourseUrl6 = '0'
	Else
		$SourseUrl6 = 'http://www.oracle.com'&$UrlZagJRE6[0]
	EndIf
		If @OSArch <> 'X64' Then
			$ADRZagJRE = StringRegExp(BinaryToString(InetRead($SourseUrl6, 1), 4), '(?i)Windows x86 Offline"[\,] "size"[\:]"\d+.*MB"[\,]"filepath"[\:]"(.*?)"[\}]', 3)
			If @error Then
				$AdrJRE = '0'
			Else
				$AdrJRE = $ADRZagJRE[0]
			EndIf
		Else
			$ADRZagJRE = StringRegExp(BinaryToString(InetRead($SourseUrl6, 1), 4), '(?i)(?i)Windows x64"[\,] "size"[\:]"\d+.*MB"[\,]"filepath"[\:]"(.*?)"[\}]', 3)
			If @error Then
				$AdrJRE = '0'
			Else
				$AdrJRE = $ADRZagJRE[0]
			EndIf
		EndIf
ProgressOn('Скачивание', 'Java SE Runtime Environment', '0 %', -1, -1, 18)
Local $hDownloadJAVA = InetGet($AdrJRE, @ScriptDir&'\Java SE.exe', 1, 1)
Do
If InetGetInfo($hDownloadJAVA, 1) Then
Local $iPersent = Round((InetGetInfo($hDownloadJAVA, 0) / InetGetInfo($hDownloadJAVA, 1)) * 100)
ProgressSet($iPersent, $iPersent & ' %, ' & _WinAPI_StrFormatByteSize(InetGetInfo($hDownloadJAVA, 0)) & ' (' & _WinAPI_StrFormatByteSize(InetGetInfo($hDownloadJAVA, 1)) & ')')
TraySetState(1)
TraySetToolTip('Java SE Runtime Environment загружен на '&$iPersent&' %')
EndIf
Sleep(500)
Until InetGetInfo($hDownloadJAVA, 2)
InetClose($hDownloadJAVA)
ProgressOff()
_IEQuit ($oIE)
EndIf

;Для отсутствующей версии явы
If RegRead($HKLM&"\SOFTWARE\JavaSoft\Java Runtime Environment", "CurrentVersion") < '1.6' Or RegRead($HKLM&"\SOFTWARE\JavaSoft\Java Runtime Environment", "CurrentVersion") > '1.7' Then
Local $oIE = _IECreate ($UForeIE7, 0, 0)
_IELoadWait ($oIE)
ClickById($oIE, $agreement7)
	$UrlZagJRE7 = StringRegExp(BinaryToString(InetRead('http://www.oracle.com/technetwork/java/javase/downloads/index.html', 1), 4), '(?i)center"[\>]JRE[\<]/h3[\>]\s+[\<]div align[\=]"center"[\>][\<]a href[\=]"(.*?)" target', 3)
		If @error Then
			$SourseUrl7 = '0'
		Else
			$SourseUrl7 = 'http://www.oracle.com'&$UrlZagJRE7[0]
			If @OSArch <> 'X64' Then
				$UrlJRE7 = StringRegExp(BinaryToString(InetRead($SourseUrl7, 1), 4), '(?i)Windows x86 Offline"[\,] "size"[\:]"\d+.*MB"[\,]"filepath"[\:]"(.*?)"[\}]', 3)
				If @error Then
					$AdrJRE = '0'
				Else
					$AdrJRE = $UrlJRE7[0]
				EndIf
			Else
			$UrlJRE = StringRegExp(BinaryToString(InetRead($SourseUrl7, 1), 4), '(?i)(?i)Windows x64"[\,] "size"[\:]"\d+.*MB"[\,]"filepath"[\:]"(.*?)"[\}]', 3)
				If @error Then
					$AdrJRE = '0'
				Else
					$AdrJRE = $UrlJRE[0]
				ProgressOn('Скачивание', 'Java SE Runtime Environment', '0 %', -1, -1, 18)
				EndIf
			EndIf
ProgressOn('Скачивание', 'Java SE Runtime', '0 %', -1, -1, 18)
Local $hDownloadJAVA = InetGet($AdrJRE, @ScriptDir & '\Java SE.exe', 1, 1)
Do
    If InetGetInfo($hDownloadJAVA, 1) Then
        Local $iPersent = Round((InetGetInfo($hDownloadJAVA, 0) / InetGetInfo($hDownloadJAVA, 1)) * 100)
        ProgressSet($iPersent, $iPersent & ' %, ' & _WinAPI_StrFormatByteSize(InetGetInfo($hDownloadJAVA, 0)) _
		& ' (' & _WinAPI_StrFormatByteSize(InetGetInfo($hDownloadJAVA, 1)) & ')')
		TraySetState(1)
		TraySetToolTip('Java SE Runtime загружен на '&$iPersent&' %')
    EndIf
    Sleep(500)
Until InetGetInfo($hDownloadJAVA, 2)
InetClose($hDownloadJAVA)
ProgressOff()
_IEQuit ($oIE)
	EndIf
EndIf
EndFunc   ;==>_7

Func ClickById($oIE,$id)
    _IELoadWait ($oIE)
    Global $tmp=_IEGetObjById($oIE, $id)
    _IEAction($tmp,"click")

EndFunc
Но почему то загрузка обрывается и скрипт вылетает. Хотя чекбокс нажимается. Ведь
Код:
InetGet
использует тот же IE
Подскажите может я неправильно что-то делаю?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Трудно понять смысл вашего кода, вот вариант которые качает jdk-7u9-windows-i586.exe
Пояснения в каждой строчке, может возьмете что на заметку. 8)
Код:
#include <IE.au3>
$sUrl = 'http://www.oracle.com/technetwork/java/javase/downloads/jdk7u9-downloads-1859576.html'
$oIE = _IECreate($sUrl, 1)
If @error Then Exit 99
Local $hDownload
$oInput = _IEGetObjByName($oIE, 'agreementjdk-7u9-oth-JPR') ;Может меняться
$oInput.click() ;Кликаем на "согласен"
$sCookie = $oIE.document.cookie() ;Самая важная часть, получение куков. Естественно в браузере они болжны быть включены.
$oAs = _IETagNameGetCollection($oIE, 'a') ;Все ссылки
For $oA In $oAs
	If StringInStr($oA.href, '.exe') Then ;Все екзешники.
		;Здесь сделай какой нибудь анализ, какую ссылку тебе надо качать.
		;Я качаю первый екзешник.
		$hDownload = InetGet($oA.href & "?" & $sCookie, 'test.exe', 1, 1) ;Имя файла можешь тоже подставить на оригинальное.
		ConsoleWrite($oA.href & @LF)
		ExitLoop
	EndIf
Next

If $hDownload Then
	Do
		Sleep(250)
		$aData = InetGetInfo($hDownload, 0)
		ConsoleWrite($aData & @LF)
	Until InetGetInfo($hDownload, 2)
	InetClose($hDownload) ; Close the handle to release resources.
Else
	ConsoleWrite('! Нечего качать.' & @LF)
EndIf
 
Автор
I

ivsatel

Продвинутый
Сообщения
319
Репутация
84
inververs
Великолепно!!!


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

Снял "Тема решена". Так как обнаружена проблема, при использовании этих скриптов в IE версии 6-ть.
IE №6 не отдает куки, как я понял. Почему - пока неизвестно.
 
Верх