Что нового

условия наличия WEB элемента

1dark1

Новичок
Сообщения
16
Репутация
0
составил скрипт для онлайн переводчика отправки текста из буфера на сайт и получения перевода.
Код:
#include <IE.au3>
#include <Array.au3>
#include <String.au3>
#include <file.au3>
#include <date.au3>

$url = 'yarp-online.ru' ;сайт

Local $oIE = _IECreate($url,1,1) ;

;тут ручная авторизация

$clip1 = ClipGet()
While 1
  $clip2 = ClipGet()
  If @error = 0 And $clip1 <> $clip2 Then
   $clip1 = $clip2
   OnClipCopy($clip2)
EndIf
  Sleep(10)
WEnd
Func OnClipCopy($sClipStr)

$JP = ClipGet()  ; оригинал текста

Local $oCom = _IEGetObjById($oIE, "src")

_IEPropertySet($oCom, "innertext", $JP)
$oForm = _IEFormGetCollection($oIE, 0)

$oInputs=_IETagNameGetCollection($oIE, 'input')
If Not @error Then
    For $oInput In $oInputs
        $sPropInp=_IEPropertyGet($oInput, 'outerhtml')
        If Not @error Then
            If StringInStr($sPropInp, 'Перевести') And StringInStr($sPropInp, 'submit') Then ; текст кнопки
                _IEAction($oInput, 'click') ; нажать кнопку
                ExitLoop
            EndIf
        EndIf
    Next
 EndIf
_IELoadWait($oIE)


$oDiv=_IEGetObjById($oIE, "result") ; перевод текста

$text = $oDiv.innertext
$result = StringRegExpReplace ($text, '' ,'') ; для заменны текстов(в будущем)
MsgBox(0, "Text", ($result ))
EndFunc

Проблема в том что элемент с переводом не всегда приходит,
если появляется перевод то будут и дальнейшие действия скрипта,
если не появился тогда скрипт прерывается при попытки выполнить следующие действия,
мне надо чтоб если перевод не появился то дальше действия не выполнять до тех пор пока не появится перевод,
как это правильно сделать?

Тему как лучше назвать придумать не могу,если подскажите правильное названия переменую.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
1dark1 [?]
Тему как лучше назвать придумать не могу,если подскажите правильное названия переменую.
Придумываем названия тем для новичков

мне надо чтоб если перевод не появился то дальше действия не выполнять до тех пор пока не появится перевод
Ну так сделайте паузу, войдите в цикл. Общий смысл в том, чтобы сделать жадержку и мониторить HTML код на предмет появления динамического участка кода.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
While 1
$oDiv=_IEGetObjById($oIE, "result") ; перевод текста
If IsObj($oDiv) Then ExitLoop
Sleep(1000)
WEnd



Добавлено:
Сообщение автоматически объединено:

Или так (чтобы совсем не зацикливался):
Код:
For $k = 1 To 20
$oDiv=_IEGetObjById($oIE, "result") ; перевод текста
If IsObj($oDiv) Then ExitLoop
Sleep(1000)
Next
If Not IsObj($oDiv) Then Exit MsgBox(16, "error", "error")
 
Автор
1

1dark1

Новичок
Сообщения
16
Репутация
0
Как-то у меня вроде получилось и даже работает
alex33 ваш вариант не подходит , он не позволяет получить новый текст
если не находит в
Код:
$oDiv=_IEGetObjById($oIE, "result") ; перевод текста
.

вот так вышло
Код:
#include <IE.au3>
#include <Array.au3>
#include <String.au3>
#include <file.au3>
#include <date.au3>
#include <Misc.au3>

$url = 'yarp-online.ru' ;сайт

Local $oIE = _IECreate($url,1,1) ;

;тут ручная авторизация

$clip1 = ClipGet()
While 1
  $clip2 = ClipGet()
  If @error = 0 And $clip1 <> $clip2 Then
   $clip1 = $clip2
   OnClipCopy($clip2)
EndIf
  Sleep(10)
WEnd
Func OnClipCopy($sClipStr)

$JP = ClipGet()  ; оригинал текста

Local $oCom = _IEGetObjById($oIE, "src")

_IEPropertySet($oCom, "innertext", $JP)
$oForm = _IEFormGetCollection($oIE, 0)

$oInputs=_IETagNameGetCollection($oIE, 'input')
If Not @error Then
    For $oInput In $oInputs
        $sPropInp=_IEPropertyGet($oInput, 'outerhtml')
        If Not @error Then
            If StringInStr($sPropInp, 'Перевести') And StringInStr($sPropInp, 'submit') Then ; текст кнопки
                _IEAction($oInput, 'click') ; нажать кнопку
                ExitLoop
            EndIf
        EndIf
    Next
 EndIf
_IELoadWait($oIE)

If @error Then
    MsgBox(16, 'Error', '_IECreate')
    Exit
EndIf
$fText = _Check_Text($oIE, 'Разбор текста')
If @error Then
    MsgBox(16, 'Error', '_Check_Text')
Else
    If $fText Then
        $oDiv=_IEGetObjById($oIE, "result") ; перевод текста
		$text = $oDiv.innertext
$result = StringRegExpReplace ($text, '' ,'') ; для заменны текстов(в будущем)
MsgBox(0, "Text", ($result ))

    Else

    EndIf
EndIf

EndFunc

Func _Check_Text($o_Obj, $s_Text)
    Local $s_BodyText
    If Not IsObj($o_Obj) Then Return SetError(1)
    If Not $s_Text Then Return SetError(1)
    $s_BodyText = _IEBodyReadText($o_Obj)
    If @error Then Return SetError(1)
    Return SetError(0, 0, StringInStr($s_BodyText, $s_Text) <> 0)
EndFunc   ;==>_Check_Text


пока тока за стабильность не уверен.




Оставлю так как сделал было несколько вылетов с
Код:
_IECreate
,но они не такие частые.
 
Верх