Что нового

Помогите скачать картинку

eropov

Jury
Сообщения
195
Репутация
25
Здравствуйте. Есть капча на сайте(https://secure.e-konsulat.gov.pl), чтобы ее увидеть зайдите на сайт, выберите два любых селекта с городами, выберите в левой колонке визу и вы перейдете на страницу с капчей. После всех манипуляций пробовал скачать картинку так:
Код:
#include <IE.au3>

$oIE = _IECreate("https://secure.e-konsulat.gov.pl/Uslugi/RejestracjaTerminu.aspx?IDUSLUGI=8&idpl=0", 1, 1, 1)
$caps =_IETagNameGetCollection($oIE, 'img')

For $cap In $caps
	If $cap.id == "ctl00_ContentPlaceHolder1_KomponentObrazkowy_CaptchaImageID" Then
		;MsgBox(1, $cap.src, $cap.id)
		InetGet($cap.src, 'cap.png', 2)
	EndIf
Next

Картинка качается, но в содержимом картинки html. Немного разобравшись, понял, что для ее скачивания нужны куки.
Как получить содержимое картинки из браузера?
Как еще ее можно скачать?
 
Автор
E

eropov

Jury
Сообщения
195
Репутация
25
Нашел решение:

Код:
;<==========================<<<БЛОК ФУНКЦИЙ ПОИСКА И КОПИРОВАНИЯ ФАЙЛА КАПЧИ ИЗ КЭША>>>=======================================>

Func _Capture($sCache);, $sDest);Вовзращает полный путь + имя файла капчи
	Local $aSearch, $sMaxDate, $aSearchTimeNew
	$aSearch = _FileSearch($sCache, '*.png', 1, 1)
	Local $aS[UBound($aSearch)]
	If $aSearch[0] Then
		For $i = 1 To $aSearch[0]
			$aS[$i] = FileGetTime($aSearch[$i], 0, 1);Ищем последний файл по дата создания
		Next
		$sMaxDate = _ArrayMax($aS, 1);Находим максимальную дату		
		For $i = 1 To $aSearch[0]
			If FileGetTime($aSearch[$i], 0, 1) == $sMaxDate Then ;Находим путь к капче
				Return $aSearch[$i]				
			EndIf
		Next
	Else
		Return 0
	EndIf
EndFunc   ;==>_Capture

Func _FileSearch($sPath, $sFileMask = '*', $iFlag = 0, $iSubdir = 1)
	;фильтры для поиска нужно указывать через ;
	;$iFlag = 0 - Файлы и папки (по умолчанию)
	;$iFlag = 1 - Только файлы
	;$iFlag = 2 - Только папки
	;$iSubdir = 1 - Искать во всех подкаталогах (по умолчанию)
	;$iSubdir = 0 - Искать только в самой папке
	Local $sOutBin, $sOut, $aOut, $sRead, $hDir, $sAttrib, $sSubdir, $aMasks
	If $iSubdir Then
		$sSubdir = ' /S /B'
	Else
		$sSubdir = ' /B'
	EndIf
	Switch $iFlag
		Case 1
			$sAttrib = ' /A-D'
		Case 2
			$sAttrib = ' /AD'
		Case Else
			$sAttrib = ' /A'
	EndSwitch

	$sOut = StringToBinary('0' & @CRLF, 2)
	$aMasks = StringSplit($sFileMask, ';')

	For $i = 1 To $aMasks[0]
		$hDir = Run(@ComSpec & ' /U /C DIR "' & $sPath & '\' & $aMasks[$i] & '"' & $sSubdir & $sAttrib, @SystemDir, @SW_HIDE, 6)
		While 1
			$sRead = StdoutRead($hDir, False, True)
			If @error Then
				ExitLoop
			EndIf
			If $sRead <> "" Then
				$sOut &= $sRead
			EndIf
		WEnd
	Next
	$aOut = StringRegExp(BinaryToString($sOut, 2), '[^\r\n]+', 3)
	If @error Then
		Return SetError(1)
	EndIf
	$aOut[0] = UBound($aOut) - 1
	Return $aOut
EndFunc   ;==>_FileSearch
 
Верх