1. Можно ли по аутоит двигаться по ссылкам? Если да, то как?
Например(хочу попасть на форум):
#include <IE.au3>$oIE = _IECreate ("
http://www.autoitscript.com")
_IELinkClickByText ($oIE, "Форум")
Здесь функция
_IELinkClickByText не приемлема! Почему? Смотрим.
Вот фрагмент
HTML кода главной страницы
httр://www.autoitscript.com
<map name="Map">
<area alt="Home" href="http://www.autoitscript.com" coords="414, 12, 497, 31" shape="rect">
<area alt="AutoIt v3" href="http://www.autoitscript.com/autoit3/" coords="496, 11, 573, 30" shape="rect">
<area alt="Forum" href="http://www.autoitscript.com/forum/index.php?" coords="576, 12, 651, 31" shape="rect">
<area alt="Wiki" href="http://www.autoitscript.com/wiki" coords="652, 12, 724, 31" shape="rect">
<area alt="Gift Shop" href="http://www.cafepress.com/autoit" coords="725, 12, 802, 31" shape="rect">
<area alt="Contact" href="http://www.autoitscript.com/email_us.shtml" coords="803, 12, 878, 31" shape="rect">
</map>
[box title=Для справки]Тег <MAP> служит контейнером для элементов <AREA>, которые определяют активные области для карт-изображений. Такие области устанавливают невидимые зоны на изображении, являющиеся ссылками на HTML-документы. Цель использования тега <MAP> — в связывании тега <IMG> с клиентской картой-изображением. Эта связь определяется применением единого идентификатора как в теге <IMG>, задаваемого параметром usemap, так и в теге <MAP>, устанавливаемого параметром name. [/box]
Однако в
IE.au3 нет подходящих функций для работы с областями карт-изображений!!!
Но выход есть! Что мы имеем?
1. Тег
<area>
2. Его атрибуты
alt,
href,
coords и
shape
Вот от этого и будем "танцевать"
Больше всего нам подойдёт тег
alt, его и возьмём.
Пример 1 ("напролом")
#include<IE.au3>
$oIE = _IECreate ('http://www.autoitscript.com')
$oTag = _IETagNameGetCollection($oIE, 'area',2)
_IEAction($oTag,'click')
Здесь мы прямо указали индекс интересующего нас тега
<area>
Это не универсальный способ, так как для того чтобы нажать на "Wiki", нам снова нужно будет писать такой же код, но только уже с индексом
3. Неудобно, да?!
Пример 2 ("функция")
#include<IE.au3>
$oIE = _IECreate ('http://www.autoitscript.com')
$oTag = _IETagAttributeGet($oIE, 'area', 'alt', 'Forum')
If $oTag <> 0 Then _IEAction($oTag,'click')
Func _IETagAttributeGet($Obj, $sTag, $sAttribute, $sValue)
Local $Result = 0
$oTags = _IETagNameGetCollection($Obj, $sTag)
For $oTag In $oTags
If $oTag.getAttribute($sAttribute) = $sValue Then
$Result = $oTag
ExitLoop
EndIf
Next
Return $Result
EndFunc
Ну вот, теперь нам будет намного легче писать своего бота!
А если тег совсем "голый", спросите вы? К примеру
<P>.
Ну, тогда придётся прибегать, к примеру, №1, хотя и его можно унифицировать ;D
3.Везде есть такая комбинация: "Если..., то ..., в противном...". Думаю этого и тут должно быть, но не нашел, как его сделать.
Например:
#include <IE.au3>
$oIE = _IECreate ("7ba.ru")
_IELinkClickByText ($oIE, "Регистрация")
___
Там регистрация поэтапно. Например бот хочу, чтобы бот ввел ник "rufik". Если этот ник занят, то "rufik1".
Если и этот ник занят, то "rufik2". Если "rufik2" тоже занят,
то пусть закроет окно.Например, как эту фишку создать?
==========================================
И еще насчет 3 вопроса, вы так и не объяснили :( там должны быть команды if... then
Честно говоря я с трудом понимаю где и что должно быть :(
Если вы про это:
Например бот хочу, чтобы бот ввел ник "rufik". Если этот ник занят, то "rufik1".
Если и этот ник занят, то "rufik2". Если "rufik2" тоже занят,
то пусть закроет окно.Например, как эту фишку создать?
то в данном случае вам нужно будет организовать проверку.
Вы должны проверять ключевые слова которые возвращает вам форма регистрации, и основываясь на них принимать те или иные действия.
Где-то так:
Dim $CountReg = 0
;~ Переход к странице регистрации
For $CountReg To 3
;~ Ждём, пока загрузится
;~ Заполнили формы
;~ Послали запрос
;~ Получили ответ
Switch 'ответ'
Case 'вы успешно зарегистрировались'
ExitLoop
Case 'такой ник уже занят'
$CountReg += 1
;~ Переход к странице регистрации
EndSwitch
Next
If $CountReg = 3 Then
;~ После трёх попыток
;~ Закрываем всё, что хотим и ...
Exit
EndIf