Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Проблемы с... условным оператором if ))

Ответить
Настройки темы
[решено] Проблемы с... условным оператором if ))

Старожил


Сообщения: 186
Благодарности: 4

Профиль | Отправить PM | Цитировать


Есть небольшой код (впоследствии хочу сделать прогу, чтобы сама добавляла друзей из одной группы вконтакте):
Код: Выделить весь код
$IE=_IECreate("http://vkontakte.ru/gsearch.php?from=people&basic=1&c[group]=11068474#c%5Bcountry%5D=0&c%5Bgroup%5D=11068474&c%5Bsection%5D=people&offset=40")
s(800)
if isobj($IE) then
$Links=_IELinkGetCollection($IE)
For $Link in $Links
if $Link.innertext="Добавить в друзья" then
msgbox(0,0,"innertext="&$Link.innerText)
if $Link.innertext<>0 then $Link.click
_IEAction($Link,"click")
endif
next
endif
При запуске скрипт почему-то выдает мсгбокс с сообщением innertext=0 и переходит на страницу участника вместо клика по ссылке добавить друзья. Следующий мсгбокс уже с сообщением "Добавить в друзья", но ссылки такой он не находит, потому что, понятное дело, уже перешел на другую страницу.
P.S. Вообще не пойму, как ссылка может называться "0", на той странице вообще таких ссылок нет.
P.P.S. Вдвойне удивляет, как после кода if $Link.innertext<>0 он совершает $Link.click в случаях, когда $Link.innertext=0

Отправлено: 12:42, 13-09-2009

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата evg64:
Вдвойне удивляет, как после кода if $Link.innertext<>0 он совершает $Link.click в случаях, когда $Link.innertext=0 »
Вы сравниваете переменные строкового типа с числовым типом, так нельзя....

Код: Выделить весь код
$IE = _IECreate("http://vkontakte.ru/gsearch.php?from=people&basic=1&c[group]=11068474#c%5Bcountry%5D=0&c%5Bgroup%5D=11068474&c%5Bsection%5D=people&offset=40")
;~ s(800)
If IsObj($IE) Then
    $Links = _IELinkGetCollection($IE)

    For $Link In $Links
        If $Link.innertext == "Добавить в друзья" Then
            MsgBox(0, 0, "innertext=" & $Link.InnerText)
            If $Link.Innertext <> "0" Then $Link.Click
            _IEAction($Link, "click")
        EndIf
    Next
EndIf

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:34, 13-09-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 186
Благодарности: 4

Профиль | Отправить PM | Цитировать


Ого, спасибо, я в жизни бы не подумал. А как возможно, что автоит различает разные типы переменных, если внутри скриптов они все хранятся как Variant?

Отправлено: 14:01, 13-09-2009 | #3


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата evg64:
как возможно, что автоит различает разные типы переменных, если внутри скриптов они все хранятся как Variant? »
Не разные типы переменных, а разные типы данных в переменной.
У типа Variant как бы есть определения - массив, строка, число, объект, указатель, и т.п.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 14:19, 13-09-2009 | #4


Старожил


Сообщения: 186
Благодарности: 4

Профиль | Отправить PM | Цитировать


Почему в данном примере переменные с разным типом данных оказываются несравнимыми? Ведь переменные вариант (со строковым и числовым типом данных) вполне нормально взаимодействуют между собой, к примеру:
$a="4"
$b=5
if $a<$b then
...
endif

Отправлено: 14:49, 13-09-2009 | #5


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата evg64:
Почему в данном примере переменные с разным типом данных оказываются несравнимыми? »
Видимо потому что AutoIt производит сравнение байтов, а в "4" меньше чем в 5 .
К примеру, если мы сравниваем буквы алфавита:

Код: Выделить весь код
$a = "a"
$b = "b"

If $a < $b Then
    ConsoleWrite("1: <" & $b & "> больше чем <" & $a & ">" & @CRLF)
Else
    ConsoleWrite("2: <" & $a & "> больше чем <" & $b & ">" & @CRLF)
EndIf
То получается что «b» больше чем «a», также к примеру как «Я» больше чем «И», и латинская буква «A» в такой проверке, окажется меньше чем кириллическая буква «А» (в которой два байта, а не один).

На эту тему на оф. форуме было длинное обсуждение, но я его что то немогу найти.

P.S
Если нужно проверить учитывая типы данных, то для этого обычно используется StringCompare, где 5 будет больше чем "6".

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:32, 13-09-2009 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Проблемы с... условным оператором if ))

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интернет - [решено] Проблемы с метрикой Syava96 Microsoft Windows 7 3 23-11-2009 21:04
Уценка контента оператором united Мобильные ОС, смартфоны и планшеты 6 17-10-2008 15:23
[решено] проблемы с эксплорером sanekkhb Лечение систем от вредоносных программ 2 09-09-2008 02:54
Установка - [решено] Проблемы с установкой Cach Microsoft Windows 2000/XP 4 15-06-2008 13:54
C/C++ - Проблема с оператором cscanf M1sha Программирование и базы данных 2 20-05-2008 23:04




 
Переход