#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