Что нового

[Сеть, интернет] Как через IE.au3 нажать на javascript строку в таблице после логического вывода

Автор
E

eropov

Jury
Сообщения
195
Репутация
25
Re: [Сеть, интернет] Как через IE.au3 нажать на javascript строку в таблице после логического выво

объясните как все работает
Те места кода где я смог что-то понять оставил коменты, в некоторых коментариях я интересуюсь для чего используется та или иная функция.
Код:
#include <IE.au3>
#include <File.au3>

Opt('MustDeclareVars', 1); Что это как работает
Opt('TrayMenuMode', 1) ; Что это как работает

Global $oIE, $iStart, $sNick

If WinExists(@ScriptName & '{[/@$@\]}') Then Exit;Что это как работает
AutoItWinSetTitle(@ScriptName & '{[/@$@\]}');Что это как работает

$oIE = _IECreate();Создаем окно IE
If @error Then ;Если приходит ошибка, выходм из скрипта
    MsgBox(16, 'Error', '_IECreate')
    Exit
EndIf

HotKeySet('{Esc}', '_Exit');Esc - выход вызов функции выхода из скрипта

$sNick = _Play_Fool($oIE)
If Not @error And $sNick <> -1 Then
    MsgBox(64, 'Info', 'Авторизируйтесь и играйте с ' & $sNick)
Else
    $oIE.Visible = False
    HotKeySet('^{1}', '_Visible_IE'); Ctrl + 1 - скрыть или отобразить окно IE
    $iStart = TimerInit()
    While 1
        If TimerDiff($iStart) >= 30000 Then ;30sec
            $sNick = _Play_Fool($oIE)
            If Not @error And $sNick <> -1 Then
                $oIE.Visible = True
                MsgBox(64, 'Info', 'Авторизируйтесь и играйте с ' & $sNick)
                ExitLoop
            Else
                $iStart = TimerInit()
            EndIf
        EndIf
        Sleep(50)
    WEnd
EndIf

Func _Play_Fool(ByRef $o_Obj, $s_Rate = '1 RUB', $s_Type = '0')
    Local $s_Url = 'http://igrun.com/?p=39', $o_Table, $o_Trs, $o_Ths, $o_Link, $s_Url_Obj, _
            $s_Nick_Player, $s_String = 'Присоединиться', $s_String_Control, $f_Yes, $i_Error = 1, _
            $s_TempFile, $i_PID

    If Not IsObj($o_Obj) Then Return SetError(1) ;как пять это выражение
    For $i = 1 To 1
        $s_Url_Obj = _IEPropertyGet($o_Obj, 'locationurl');для чего это
        If @error Then ExitLoop
        If $s_Url_Obj == $s_Url Then
            _IEAction($o_Obj, 'refresh') ;обновление страници
            If @error Then ExitLoop
        Else
            _IENavigate($o_Obj, $s_Url)
            If @error Then ExitLoop
        EndIf
        $o_Table = _IEGetObjById($o_Obj, 'gs') ;этой функции нет описания в русской справке
        If @error Then ExitLoop
        $o_Trs = _IETagNameGetCollection($o_Table, 'tr')
        If @error Or Not @extended Then ExitLoop ;что сдесь обозначает Or
        For $o_Tr In $o_Trs ;как пянять оператор In
            If $o_Tr.bgColor <> '0' Then
                $o_Ths = _IETagNameGetCollection($o_Tr, 'th')
                If @error Or Not @extended Then ContinueLoop ;для чего сдесь ContinueLoop
                $s_String_Control = ''
                For $o_Th In $o_Ths
                    $s_String_Control &= $o_Th.innertext & '|' ; о чем говорит эта строка почему амберсат перед равно
                    If StringInStr($s_String_Control, $s_Rate & '|' & $s_String & '|' & $s_Type) Then
                        $o_Link = _IETagNameGetCollection($o_Tr, 'a', 0)
                        If @error Then ExitLoop 3
                        $f_Yes = True
                        ExitLoop 2
                    EndIf
                Next
            EndIf
        Next
        $i_Error = 0
    Next
    If $i_Error Then Return SetError(1)
    If $f_Yes Then
        $i_Error = 1
        For $i = 1 To 1
            $s_TempFile = _TempFile()
            $i_PID = _Click_IE_Msg($s_TempFile)
            If @error Then ExitLoop
            _IEAction($o_Link, 'click')
            If @error Then ExitLoop
            _IELoadWait($oIE)
            If @error Then ExitLoop
            $s_Nick_Player = StringRegExpReplace($s_String_Control, '\|.*$', '') ;Что за регулярка
            $i_Error = 0
        Next
        If ProcessExists($i_PID) Then ProcessClose($i_PID) ;для чего сдесь это
        If ProcessWaitClose($i_PID, 2) Then FileDelete($s_TempFile) ;для чего сдесь это
        If $i_Error Then
            Return SetError(1)
        Else
            Return $s_Nick_Player
        EndIf
    Else
        Return -1
    EndIf
EndFunc   ;==>_Play_Fool

Func _Exit() ;Функция выхода из скрипта
    If IsObj($oIE) Then ;если если обьект IE существует _
        _IEQuit($oIE)  ;закрываем объект IE и выходим из скрипта
    EndIf
    Exit
EndFunc   ;==>_Exit

Func _Visible_IE()
    If Not IsObj($oIE) Then Return; Что это как работает
    Local $f_Visible = _IEPropertyGet($oIE, 'visible') ; Что это как работает
    $oIE.Visible = Not $f_Visible ; Что это как работает
EndFunc   ;==>_Visible_IE

Func _Click_IE_Msg($s_File)
    Local $h_File, $i_Pid_Process
    Local $s_Script = "#NoTrayIcon" & @CRLF & _ ; Что это как работает
            "While 1" & @CRLF & _
            "$hWin = WinGetHandle('[Title:Сообщение с веб-страницы; Class:#32770]')" & @CRLF & _
            "If $hWin Then ControlClick($hWin, '', '[CLASS:Button; INSTANCE:1]')" & @CRLF & _;INSTANCE:1 - OK, INSTANCE:2 - Отмена
            "Sleep(100)" & @CRLF & _
            "WEnd"
    $h_File = FileOpen($s_File, 2) ;открываем файл для записи и удаляем имеющееся содержание
    If $h_File = -1 Then Return SetError(1)
    If Not FileWrite($h_File, $s_Script) Then Return SetError(1) ; Что это как работает
    FileClose($h_File) ;Закрываем файл
    $i_Pid_Process = Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & $s_File & '"'); Что это как работает
    If Not $i_Pid_Process Then Return SetError(1)
    Return $i_Pid_Process
EndFunc   ;==>_Click_IE_Msg
 

axlwor

Скриптер
Сообщения
657
Репутация
147
Re: [Сеть, интернет] Как через IE.au3 нажать на javascript строку в таблице после логического выво

хелп тут уже не поможет :'(
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Re: [Сеть, интернет] Как через IE.au3 нажать на javascript строку в таблице после логического выво

eropov [?]
в некоторых коментариях я интересуюсь для чего используется та или иная функция.
Ответы на эти вопросы есть в справке. Если Вы пользуйтесь старой русской справкой AutoIt3_2_5_4_ru.chm, то в ней очень многое устарело. Читайте английскую с переводчиком (как я) или смотрите здесь: Ещё раз о русской справке.
 
Автор
E

eropov

Jury
Сообщения
195
Репутация
25
Re: [Сеть, интернет] Как через IE.au3 нажать на javascript строку в таблице после логического выво

как это работает? для чего все это?
Код:
Local $s_Script = "#NoTrayIcon" & @CRLF & _ ; Что это как работает
            "While 1" & @CRLF & _
            "$hWin = WinGetHandle('[Title:Сообщение с веб-страницы; Class:#32770]')" & @CRLF & _
            "If $hWin Then ControlClick($hWin, '', '[CLASS:Button; INSTANCE:1]')" & @CRLF & _;INSTANCE:1 - OK, INSTANCE:2 - Отмена
            "Sleep(100)" & @CRLF & _
            "WEnd"

madmasler
Будите добры не лейте воду, если не хотите, то не отвечайте на мои глупые вопросы, просто объясните о назначении каждой из вами написанной функции. Суть в том что, в коде много лишнего, допустим там не надо скрывать окно IE, обновлять страницу и выводить MsgBox(64, 'Info', 'Авторизируйтесь и играйте с ' & $sNick) т.к. после авторизации все обновляется javasript`ом здесь нужно модифицировать ставку таким образом, чтобы не сравнивать строку, а вытащить числовое значение и сравнивать допустим, если ставка <= 10 тогда жмем на Присоединиться. Вы же модератор и должны понимать, чем меньше воды мы будем лить в темах, тем проще будет найти нужную информацию для таких новичков как я. Скорей всего вы не поняли что вопрос ("объясните как все работает") не спрашивает логику работы того или иного куска кода (с логикой у меня все хорошо), а мое не понимание синтаксиса. Синтаксис в autoit ужасен и непонятен, на таких языках как PHP, C, C++ для меня более понятен , если бы какой добрый человек взялся перевести книгу по autoit, сделав тем самым непосильную помощь для новичков.
Да и спасибо вам за справку по autoit, а то я и впрямь пользовался той версией о который вы сказали.
 

axlwor

Скриптер
Сообщения
657
Репутация
147
Re: [Сеть, интернет] Как через IE.au3 нажать на javascript строку в таблице после логического выво

это строка. она пока никак не работает. работать она будет дальше.

ты вообще со строками имел дело? а со справкой?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Re: [Сеть, интернет] Как через IE.au3 нажать на javascript строку в таблице после логического выво

eropov [?]
как это работает?
Некоторые окна сообщений IE (например, при загрузке-скачивании файлов) блокируют дальнейшую работу до получения ответа . Но, т.к. AutoIt не поддерживает многопоточности, перед вызовом этого окна пишем во временный файл нужный код и запускаем его. После того, как временный файл сделал свою работу, закрываем процесс и удаляем этот файл.
Пример:
Код:
$s_TempFile = @ScriptDir & '\12345.au3'
;Пишем в файл 12345.au3 следующий код
$s_Script = "#NoTrayIcon" & @CRLF & _
		"Sleep(2000)" & @CRLF & _
		"While 1" & @CRLF & _
		"$hWin = WinGetHandle('[Title:Info; Class:#32770]')" & @CRLF & _
		"If $hWin Then ControlClick($hWin, '', '[CLASS:Button; INSTANCE:1]')" & @CRLF & _
		"Sleep(2000)" & @CRLF & _
		"WEnd"
$h_File = FileOpen($s_TempFile, 2)
If $h_File = -1 Then
	MsgBox(16, 'Error', 'Ошибка открытия(создания файла')
	Exit
EndIf
FileWrite($h_File, $s_Script)
FileClose($h_File)
;запускаем его
$i_PID = Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & $s_TempFile & '"')
ConsoleWrite($i_PID & @LF)

;запускаем в цикле MsgBox, которые блокируют работу до получения ответа
For $i = 1 To 10
	MsgBox(64, 'Info № ' & $i, 'Пример использования')
Next
;закрываем запущенный процесс
If ProcessExists($i_PID) Then ProcessClose($i_PID)
;удаляем файл
;If ProcessWaitClose($i_PID, 2) Then FileDelete($s_TempFile)
 
Автор
E

eropov

Jury
Сообщения
195
Репутация
25
Re: [Сеть, интернет] Как через IE.au3 нажать на javascript строку в таблице после логического выво

madmasler
Пока я дописывал выше написанное сообщение вы ответили на один мой вопрос и возможно не дочитали написанное выше? Объясните мне о назначении каждой из вами написанной функции. У меня есть еще вопрос, допустим в PHP есть разница между двойной и одинарной кавычкой т.е. при помещении переменной в одинарную кавычку выдает ее значение, а в двойную само имя переменной, существует ли такое в autoit?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Re: [Сеть, интернет] Как через IE.au3 нажать на javascript строку в таблице после логического выво

eropov [?]
Суть в том что, в коде много лишнего
Уберите то, что Вам не нужно.
Синтаксис в autoit ужасен и непонятен
Так как я не знаю ни одного ЯП, кроме AutoIt (знаю AutoIt это я себе льщю :smile:), то мне его синтаксис нравится и понятен, но на вкус и цвет ...
в PHP ... при помещении переменной в одинарную кавычку выдает ее значение, а в двойную само имя переменной
В AutoIt без разницы:
Код:
$sVar_1 = 'Вася'
$sVar_2 = "Вася"
MsgBox(64, 'Info', '$sVar_1: ' & $sVar_1 & @LF & '$sVar_2: ' & $sVar_2)

Единственное ограничения, которое я знаю, это в
Код:
#OnAutoItStartRegister "MyTestFunc"
надо использовать только двойные кавычки.
Объясните мне о назначении каждой из вами написанной функции.
Это все есть в справке.
после авторизации все обновляется...
Я просил Вас тестовые логин-пароль.
 
Автор
E

eropov

Jury
Сообщения
195
Репутация
25
Re: [Сеть, интернет] Как через IE.au3 нажать на javascript строку в таблице после логического выво

Вы меня снова не так поняли, мне нужны не функции из справки, а функции такие как _Visible_IE
 
Верх