Что нового

Как реализовать загрузку картинок на сайт.

Ranos1982

Новичок
Сообщения
130
Репутация
1
Есть сайт,к примеру http://picsee.net/ , как же нажать на кнопку "обзор..." ? да ладно,часа два бился с тегами - эффект ноль.В поле вписать локальный адресс картинки никак не получается..
 
Автор
R

Ranos1982

Новичок
Сообщения
130
Репутация
1
Все равно не пойму,там где будет написано "мой компьютер" в выпадающем меню,как там его менять - понятия не имею.... :whistle:


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

Тема решена.

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

$Form1 = GUICreate("Form1", 276, 107, 192, 124)
$Button1 = GUICtrlCreateButton("Button1", 32, 56, 75, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Button2", 152, 56, 75, 25, $WS_GROUP)

$oIE = _IECreate("http://picsee.net")
$oForm = _IEFormGetCollection($oIE, 0)


GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			$oSubmit = _IEFormElementGetCollection($oForm, 0)
			_IEAction($oSubmit, "click")
		Case $Button2

			Do
				$oSubmit1 = _IEFormElementGetCollection($oForm, 12)
			Until StringStripWS(_IEFormElementGetValue($oSubmit1), 3) = "Загрузить"
			_IEAction($oSubmit1, "click")

	EndSwitch
WEnd



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

Конечно жаль что нельзя сделать в виде ф-ции,чтобы ей задавать только путь к картинке..
 
Автор
R

Ranos1982

Новичок
Сообщения
130
Репутация
1
Ребята подскажите,что не так делаю! Закончить не могу код!

Ну вот обьясните мне,ЧТО ТУТ не так??? :whistle:


Код:
$oIE = _IEAttach('PicSee')

;~ 		clickInTag('', $oIE, "$oLink.name == 'file[]'")
;~         clickInTag('', $oIE, "$oLink.type == 'submit'")

		$oLinks = _IETagNameGetCollection($oIE,'td')
		For $oLink In $oLinks
			If StringInStr ($oLink.outertext,'Прямой') Then

                       $oLinkw = _IETagNameGetCollection($oIE,'td')
					   MsgBox (16,'',$oLinkw.innertext)
					   MsgBox (16,'',$oLinkw.value)
					   MsgBox (16,'',$oLinkw.text)

				ExitLoop
			EndIf
		Next





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

я уже пробывал всячесски....и ничего не получилось в итоге :'(
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Ranos1982,
Код:
#include <IE.au3>
#include <File.au3>
#include <Array.au3>

Opt('MustDeclareVars', 1)

Global $sUrl = 'http://picsee.net/', $sTempFile, $oIE, $oForm, $oInput, $iPID, $sMessage, _
		$sFilePic = @MyDocumentsDir & '\Скриншоты\Captured Image9.png', $oTDs, $oInputs, $iCount
Dim $aResult[6][2] = [[5],['BBCode с миникартинкой:'],['BBCode без миникартинки:'],['HTML с миникартинкой:'], _
		['HTML без миникартинки:'],['Прямой URL картинки']]

$sMessage = _Check_Pic($sFilePic)
If @error Then
	MsgBox(16, 'Error', $sMessage)
	Exit
EndIf

OnAutoItExitRegister('_Del')

$sTempFile = _TempFile(@TempDir)
$iPID = _Set_Pic($sFilePic)
If Not $iPID Then
	MsgBox(16, 'Error', 'Error')
	Exit
EndIf

$oIE = _IECreate($sUrl);, 0, 0)
If @error Then Exit
For $i = 1 To 1
	$oForm = _IEFormGetCollection($oIE, 0)
	If @error Then ExitLoop
	$oInput = _IEFormElementGetObjByName($oForm, 'file[]')
	If @error Then ExitLoop
	_IEAction($oInput, 'click')
	If @error Then ExitLoop
	_IELoadWait($oIE)
	If @error Then ExitLoop
	_IEFormSubmit($oForm)
	If @error Then ExitLoop
	_IELoadWait($oIE)
	If @error Then ExitLoop
	$oTDs = _IETagNameGetCollection($oIE, 'td')
	If @error Then ExitLoop
	For $oTD In $oTDs
		For $j = 1 To $aResult[0][0]
			If StringInStr($oTD.innertext, $aResult[$j][0]) Then
				$oInputs = _IETagNameGetCollection($oTD, 'input')
				If @error Then ContinueLoop
				For $oInput In $oInputs
					If $oInput.type == 'text' Then
						$aResult[$j][1] = $oInput.value
						$iCount += 1
						ExitLoop
					EndIf
				Next
			EndIf
		Next
		If $iCount = 5 Then ExitLoop
	Next
Next
If @error Then
	_IEQuit($oIE)
	MsgBox(16, 'Error', 'Error')
Else
	_IEQuit($oIE)
	_ArrayDisplay($aResult)
EndIf

Func _Check_Pic($s_FilePic)
	Local $sExtension, $sString = 'jpeg|jpg|gif|png|'
	If Not FileExists($s_FilePic) Then Return SetError(1, '', 'Файл отсутствует')
	If FileGetSize($s_FilePic) >= 5 * 1024 * 1024 Then Return SetError(1, '', 'Файл слишком большой')
	$sExtension = StringRegExpReplace($s_FilePic, '^.*\.', '')
	If Not StringInStr($sString, $sExtension) Then Return SetError(1, '', 'Формат не поддерживается')
	Return SetError(0)
EndFunc   ;==>_Check_Pic

Func _Del()
	If ProcessExists($iPID) Then
		ProcessClose($iPID)
		Sleep(500)
	EndIf
	FileDelete($sTempFile)
EndFunc   ;==>_Del

Func _Set_Pic($s_File_Pic)
	Local $h_File, $i_Pid
	Local $s_Script = "#NoTrayIcon" & @CRLF & _
			"$hWin = WinWait('[Title:Выбор файла для выгрузки; Class:#32770]', '', 60)" & @CRLF & _
			"If Not $hWin Then" & @CRLF & _
			"ToolTip('Ошибка 1', 0, 0)" & @CRLF & _
			"Sleep(5000)" & @CRLF & _
			"Exit" & @CRLF & _
			"EndIf" & @CRLF & _
			"ControlSetText($hWin, '', '[CLASS:Edit; INSTANCE:1]', '" & $s_File_Pic & "')" & @CRLF & _
			"Sleep(500)" & @CRLF & _
			"If ControlGetText($hWin, '', '[CLASS:Edit; INSTANCE:1]') <> '" & $s_File_Pic & "' Then" & @CRLF & _
			"ToolTip('Ошибка 2', 0, 0)" & @CRLF & _
			"Sleep(5000)" & @CRLF & _
			"Exit" & @CRLF & _
			"EndIf" & @CRLF & _
			"ControlClick($hWin, '', '[CLASS:Button; INSTANCE:2]')" & @CRLF & _
			"Sleep(500)" & @CRLF & _
			"If WinExists($hWin) Then" & @CRLF & _
			"ToolTip('Ошибка 3', 0, 0)" & @CRLF & _
			"Sleep(5000)" & @CRLF & _
			"EndIf" & @CRLF & _
			"Exit"
	$h_File = FileOpen($sTempFile, 2)
	FileWrite($h_File, $s_Script)
	FileClose($h_File)
	$i_Pid = Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & $sTempFile & '"')
	Return $i_Pid
EndFunc   ;==>_Set_Pic
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
Ranos1982, так принципиально использовать именно этот сервис хранения изображений?
imageshack.us подойдёт?
это попробуй...
 

The Dream

Новичок
Сообщения
393
Репутация
3
Нет , ребята , нужно именно решить ту не большую проблему , какую я указал .
так как хотелось,конечно не получилось.Тоесть ввести пусть к файлу в строчку перед кнопкой "обзор.." - не получилось . Но со второй проблемой тоже не знаю что делать (только что пришел с работы) .



неужели оттуда,никаким способом не вытянуть значение (value) :whistle:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
The Dream,
Убрал спойлер в своем Ответе #5, похоже, Вы его не видите. Я его в Chrome тоже не вижу.

The Dream [?]
Нет , ребята , нужно именно решить ту не большую проблему , какую я указал .
Я что-то не понимаю, автор темы Ranos1982, а какая у Вас проблема я не знаю.
 

The Dream

Новичок
Сообщения
393
Репутация
3
Спасибо , попробую .


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

madmasles

Простите за наглость , но нельзя ли немножко по проще ? пожалуйста..

без всяких проверок.И правильно ли я полагаю,в поле перед кнопокой "обзор" , и поля с ссылками на картинку - их нельзя обнаружить и с ними работать ?)


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

madmasles
madmasles сказал(а):
Я что-то не понимаю, автор темы Ranos1982, а какая у Вас проблема я не знаю.

Простите,может я не так выразился ..нужна ф-ция,которая загружает картинку на сайт и в последствии выдает ее url.Желательно,чтобы это было через браузер (IE).

Так вот,как бы сложного нету.Но значение в итоге (в поле,где ссылка) - я прочитать не могу (не понимаю почему,"value" - есть) . Поместить путь в поле перед кнопокй "обзор.." было бы идеально , но увы - как я не пытался,у меня так и не получилось это реализовать .

Я не думал,что бывают "поля",не видимые получается как . Надеюсь,теперь понятно :whistle:


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

madmasles

Прошу прощения,"Ranos" - это мой ник другой,так как я к этому - забыл пароль.Прошу прощения и понять ;)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
The Dream [?]
Поместить путь в поле перед кнопокй "обзор.." было бы идеально , но увы - как я не пытался,у меня так и не получилось это реализовать .
Не получится у вас этого сделать, потому что в целях безопасности input`у с типом 'file' браузер не даст присвоить значение , только через диалоговое окно выбрать файл. Это основы DHTML.
 

The Dream

Новичок
Сообщения
393
Репутация
3
Garrett

ну а как тогда мне забрать значение с "поля",где в итоге url на картинку (после того как загрузил) ?

Или тоже никак?
 

The Dream

Новичок
Сообщения
393
Репутация
3
madmasles

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

Код:
$oInput = _IEFormElementGetObjByName($oForm, 'file[]')
               _IEAction($oInput, 'click')



Так что,спасибо.Все сделано ОЧЕНЬ грамотно,да и вообще,вижу вы уверенно набираете обороты в программировании.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
The Dream [?]
мне показался сложным
Так человек же вам написал, причём тут сложный? Главное рабочий! А уж вы немного поднапрягитесь (не с девушкой ;)) а с кодом и разберите его по полочкам, хотя бы методом проб и ошибок.

[?]
ну а как тогда мне забрать значение с "поля",где в итоге url на картинку (после того как загрузил) ?
Забирается значение как с текстового поля _IEFormElementGetValue (если в форме) или _IETagNameGetCollection , там никаких проблем быть не должно.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
OffTopic:
Garrett [?]
А уж вы немного поднапрягитесь (не с девушкой
wink.gif
)
Не, лучше с девушкой, в этом случае AutoIt может и подождать. ;D
 
Верх