Что нового

[Окна, Диалоги] Примитивный вопрос по IE.au3

WasonAl

Новичок
Сообщения
31
Репутация
1
Очень извиняюсь и за свой примитивный вопрос и за то, что не смог правильно назвать тему.
Начал разбираться с IE.au3 и сразу же попал в тупик. Нужен некий толчок, дальше надеюсь разобраться сам. Итак, есть пример
Код:
#include <IE.au3>
$oIE = _IECreate ("http://www.google.com")
$oForm = _IEFormGetObjByName ($oIE, "f")
$oQuery = _IEFormElementGetObjByName ($oForm, "q")
_IEFormElementSetValue ($oQuery, "AutoIt IE.au3")
_IEFormSubmit ($oForm)

[box title=TitleBox]Прошу объяснить, откуда взялись названия f и q? Есть ли какое-либо средство вроде Conrol Viewer-а, чтобы вытягивать из разных веб-страниц названая форм и объектов?[/box]
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
964
WasonAl [?]
откуда взялись названия f и q?
[box]<input autocomplete="off" class="lst" type="text" name="q" maxlength="2048" value="" title="Поиск" spellcheck="false">
<form action="/search" id="tsf" method="GET" name="f" onsubmit="return q.value!=''" role="search" style="display:block;margin:0 auto;background:none">[/box]

Есть ли какое-либо средство вроде Conrol Viewer-а, чтобы вытягивать из разных веб-страниц названая форм и объектов?
Есть плагины для браузеров. Можно просто посмотреть в браузере код страницы и путём поиска найти то, что нужно.
 
Автор
W

WasonAl

Новичок
Сообщения
31
Репутация
1
madmasles сказал(а):

Да, загрузил, оказалось - полезная вещь.
Но почему-то с контактом он не может работать - дерево форм не строит. :blink:
Или я не так пользуюсь? :-\
 

uBaH

Новичок
Сообщения
19
Репутация
0
Добрый день. Подскажите пожалуйста . Создал приложение, в нём куча кнопок и т.д. При изменении размеров окна . Расстояние между кнопками то увеличивается , то они налазят друг на друга . Как создать окно что-бы при изменении его размеров элементы оставались в нормальном виде??? :'(
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Честно говоря Ваш вопрос не в той теме...
Используйте функцию GUICtrlSetResizing() для корректировки размеров элементов GUI
 

speshitel

Знающий
Сообщения
10
Репутация
5
vkontakte не используются формы, там используются javascript и скрытые поля input. Что самое паршивое - это то что у этих input сменный id и находить их приходится через <b>_IETagNameGetCollection</b> либо через <b>_IETagNameAllGetCollection</b>.
Если бы ты указал поконкретнее что и куда ты хочешь писать, я бы тебе помог. Сам недавно начал тесно общаться с IE.au3.
 
Автор
W

WasonAl

Новичок
Сообщения
31
Репутация
1
speshitel сказал(а):
Если бы ты указал поконкретнее что и куда ты хочешь писать, я бы тебе помог. Сам недавно начал тесно общаться с IE.au3.

Мне очень стыдно, но я хочу сделать не очень хорошую вещь: жена, узнав, что я увлёкся AutoIt-ом для своих дел, попросила написать программу, чтобы добавлять текст в группы на стенах. :-[
Выбирать группы по критериям поиска справа она собирается сама - группы связанные со здоровьем, поскольку она тренер по фитнесу. Так она по три часа в день всё это вручную пишет, может будет больше времени, чтобы отдавать семье? ;)
 

Vlasssov

Осваивающий
Сообщения
430
Репутация
25
WasonAl сказал(а):
madmasles сказал(а):

Да, загрузил, оказалось - полезная вещь.
Но почему-то с контактом он не может работать - дерево форм не строит. :blink:
Или я не так пользуюсь? :-\
Да ладно строит! Там есть такая штука, на элемент наводишь и он и положение в дереве показывает и атрибуты тэга.
 

speshitel

Знающий
Сообщения
10
Репутация
5
WasonAl
В данный момент я именно такой спам-бот и пишу (прикольно что мы друг друга нашли), мне нужно еще пару дней и я выложу здесь код.
OffTopic:
А реклама это не стыдно, это двигатель торговли :smile:
 

speshitel

Знающий
Сообщения
10
Репутация
5
[Сеть, интернет] Re: [Окна, Диалоги] Примитивный вопрос по IE.au3

Вот основной код спамера, всякие рюшечки и понты навешаю завтра.
Код:
#include <IE.au3>
Global $LincGroup[1] ; масив для адресов нужных групп
; *нужно указать значения*
$keyword = "Винница"
$image_path = "H:\DSCF9153.JPG"
$counter = 0

$oIE = _IECreate ("vkontakte.ru")
;$oIE = _IEAttach ("В Контакте")
;_IENavigate ($oIE, "http://vkontakte.ru")
; ищем группы
_IELinkClickByText ($oIE, "поиск")
Sleep(1000)
$oInput = _IEGetObjById ($oIE, "search_query")
_IEFormElementSetValue ($oInput, $keyword)
$oDiv =_IEGetObjById($oIE, "filter_groups")
_IEAction ($oDiv, "click")
Sleep(1000)
MsgBox(0,"","")

SeeAllGroup()
InfoGroup($LincGroup)
For $i = 1 To $LincGroup[0]
	_IENavigate ($oIE, $LincGroup[$i])
	If PostInGroup($image_path) = True Then $counter += 1
Next
MsgBox(0, "Результат", "Проспамлено "&$counter&" стен.")


Func SeeAllGroup() ; кликает на ссылку "показать еще" до тех пор пока она не пропадет, то есть покажет все результаты поиска. Это у меня затягивается на долго (несколько минут).
	While 1
		$oAs = _IETagNameGetCollection ($oIE, "a")
		$show_more_link = False
		For $oA In $oAs
			If $oA.id == "show_more_link" And $oA.style.display == "block" Then
				_IEAction ($oA, "click")
				Sleep(500)
				$show_more_link = True
				ExitLoop
			EndIf
		Next
		If $show_more_link = False Then
			ExitLoop
		EndIf
	WEnd
EndFunc

Func InfoGroup(ByRef $LincGroup) ; собирает информацию для выбора нужных групп
	$LincGroup[0] = 0
	$oTd = _IEGetObjByName($oIE, "results")
	$oDivs = _IETagNameGetCollection ($oTd, "div")
	For $oDiv In $oDivs
		If $oDiv.className == "info fl_l" Then
			$info_group = StringSplit($oDiv.outerHTML, @CRLF, 1)
			If StringInStr($info_group[7], "Открытая группа") > 0 Then
				If StringInStr($info_group[5], '<SPAN style="FONT-SIZE: 60%"> </SPAN>') > 0 Then $info_group[5] = StringReplace($info_group[5], '<SPAN style="FONT-SIZE: 60%"> </SPAN>', "")
				$info_group[5] = StringReplace($info_group[5], '<DIV class=labeled>', "")
				$info_group[5] = StringLeft($info_group[5], StringInStr($info_group[5], " ") - 1)
				If $info_group[5] > 50 Then
					$info_group[3] = StringReplace($info_group[3], '<DIV class=labeled><A href="', "")
					$LincGroup[0] += 1
					ReDim $LincGroup[$LincGroup[0] + 1]
					$LincGroup[$LincGroup[0]] = "http://vkontakte.ru"&StringLeft($info_group[3], StringInStr($info_group[3], '"') - 1)
					ConsoleWrite($LincGroup[$LincGroup[0]]&@CRLF)
				EndIf
			EndIf
		EndIf
	Next
EndFunc

Func PostInGroup($image_path) ; постит на стенах групп у которых есть стена
	; проверяем наличие стены
	$wall_present = False
	$oDiv_Wall = _IEGetObjById($oIE, "group_wall")
	If $oDiv_Wall <> 0 Then $wall_present = True
		
	If $wall_present = True Then ; если стена есть
		; находим и кликаем на поле "Написать сообщение..."
		$oDivs = _IETagNameGetCollection ($oDiv_Wall, "div")
		For $oDiv In $oDivs
			If $oDiv.innerText == "Написать сообщение..." And $oDiv.className == 0 Then
				_IEAction ($oDiv, "click")
				Sleep(500)
				ExitLoop
			EndIf
		Next
		; находим и кликаем на ссылку "прикрепить"
		$oDiv = _IEGetObjById($oDiv_Wall, "page_add_media")
		$oAs = _IETagNameGetCollection ($oDiv, "a")
		For $oA In $oAs
			If $oA.innerText = "прикрепить" Then
				_IEAction ($oA, "click")
				Sleep(500)
				ExitLoop
			EndIf
		Next
		; кликаем на пункт "фотографию"
		$oElement = _IEGetObjById ($oIE, "add_media_type_1_1")
		_IEAction ($oElement, "click")
		Sleep(500)
		; загружаем фотку
		$oElement = _IEGetObjById ($oIE, "choose_photo_upload_form")
		$oElement = _IEFormElementGetObjByName ($oElement, "file1")
		WinActivate(WinGetTitle("В Контакте", ""), "")
		_IEAction ($oElement, "focus")
		Sleep(500)
		Send("{SPACE}")
		WinWait("Выбор файла для выгрузки")
		ControlSetText("Выбор файла для выгрузки", "", "Edit1", $image_path)
		ControlClick("Выбор файла для выгрузки", "&Открыть", "Button2")
		; ждем окончания загрузки
		While 1
			Sleep(100)
			$oElement = _IEGetObjById($oIE, "box_layer_wrap")
			If $oElement.style.display = "none" Then ExitLoop
		WEnd
		; кликаем на "отправить"	
		Sleep(500)
		$oElement = _IEGetObjById($oIE, "send_post")
		_IEAction ($oElement, "click")
		Return True
	EndIf
	If $wall_present = False Then Return False ; если стены нету
EndFunc
много чего ты можешь на прямую содрать, но скорее всего тебе тоже предстоит тчательный разбор кодов vkontekte, там они навояли конечно нехило!!! :wacko:
для разбора кодов страницы я пользуюсь плагином для Mozilla Firefox - firebug он мне больше нравится чем DebugBar для Internet Explorer
 

Vlasssov

Осваивающий
Сообщения
430
Репутация
25
Тоже всех вывожу всех членов группы после поиска, но с помощью скроллинга

Код:
Func _Vkontakte_all_members_group()

	$f = 0
	$iNumLinks = 0

	While 1

		$iNumLinks1 = $iNumLinks
		$oLinks = _IELinkGetCollection($oIE)
		$iNumLinks = @extended

		If $iNumLinks = $iNumLinks1 Then
			ExitLoop
		EndIf
		For $j = 1 To 10
			$oIE.document.parentWindow.scrollBy(0, 10 * 300)
			Sleep(500)
		Next
		_IELoadWait($oIE)
		Sleep(1000)
	WEnd
EndFunc   ;==>_Vkontakte_all_members_group
 

speshitel

Знающий
Сообщения
10
Репутация
5
Vlasssov
что это означает? Что оно делает? И где ты нарыл такую команду?
Код:
$oIE.document.parentWindow.scrollBy(0, 10 * 300)
я не знаю где искать те слова что идут после точек, расскажи пожалуйста.
 

speshitel

Знающий
Сообщения
10
Репутация
5
Vlasssov
Попробовал твою функцию, на IE v6.0.... чет не работает. Позже попробую на v8
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
speshitel [?]
я не знаю где искать те слова что идут после точек
это методы объекта InternetExplorer.Application
подробнее, копай UDF IE.au3
если еще подробнее, то MSDN
 

Vlasssov

Осваивающий
Сообщения
430
Репутация
25
Нарыл вот тут
http://autoit-script.ru/index.php?topic=4704.msg34055#msg34055
Насчет IE6 - где-то тут обсуждалось, что Восьмой работает стабильней, в смысле утекающей памяти, например. Так что нужно ставить восьмой.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
964
speshitel [?]
что это означает?
Код:
$oIE = _IECreate("http://autoit-script.ru")
 ; Возвращаем IWebBrowser2 интерфейс
ConsoleWrite(ObjName($oIE) & @CRLF)
 ; Document - получаем объект автоматизации активного документа
ConsoleWrite(ObjName($oIE.Document) & @CRLF)
 ; parentWindow - возвращаем ссылку на объект-контейнер (окно), в котором загружен документ.
ConsoleWrite(ObjName($oIE.Document.parentWindow) & @CRLF)
; scrollBy - прокручиваем scrollbar по отношению к текущей позиции на указанное в пикселях смещение.  X(горизонталь) и Y(вертикаль)
$oIE.Document.parentWindow.scrollBy(0, 10 * 300)
 

speshitel

Знающий
Сообщения
10
Репутация
5
Vlasssov сказал(а):
Насчет IE6 - где-то тут обсуждалось, что Восьмой работает стабильней, в смысле утекающей памяти, например. Так что нужно ставить восьмой.
На восьмом работает :ok: , но vkontakte как-то так замутили что не каждый раз когда скролл опускается в самый низ появляется новая партия найденных, то есть ссылка "показать еще видна". Со всем уважением Vlasssov, мне кажется, что кликать на эту ссылку будет вернее чем надеяться, что сайт очень стабильный. А Ваша функция для меня очень поучительная.
 
Верх