Что нового

[Автоматизация] Нахождение кнопки на веб-странице и нажатие

persk

Новичок
Сообщения
4
Репутация
0
Версия Autoit: v3

Есть страница на веб ресурсе с данными, которую нужно периодически обновлять, пока не появится кнопка 1 (Добавить):
Код:
<a href="#" class="easyui-linkbutton l-btn" iconcls="icon-save" onclick="preRegApply(); return false;"><span class="l-btn-left"><span style="padding-left: 20px;" class="l-btn-text icon-save l-btn-focus">Добавить</span></span></a>

если кнопка появилась нажать на нее и далее в открывшейся форме на кнопку 2 (Сохранить):
Код:
<div class="dialog-button" id="member_add_buttons" style="">
		<a href="#" class="easyui-linkbutton l-btn" iconcls="icon-save" onclick="preRegSave(); return false;"><span class="l-btn-left"><span style="padding-left: 20px;" class="l-btn-text icon-save">Сохранить</span></span></a>

Далее появится всплывающее окно, что данные сохранены. И так по кругу обновлять страницу к примеру раз в 10 сек, до появления кнопки 1.
Одновременно с работой скрипта складывать статистику в текстовый файл. (количество нажатий/дата/время)
Спасибо.

Вот, собрал по разным темам кусок кода для обновления, на этом и застопорился

Код:
#include <IE.au3>

HotKeySet('{F10}', '_Exit')

Func _Exit()
    Exit
EndFunc

$web_address = InputBox("ввод адреса", "Введите веб-адрес :", "http://", "", 500, 50)
$oIE = _IECreate ($web_address)

While 1
    Sleep(10000)  ; пауза между обновлениями в миллисекундах
    _IEAction($oIE, "refresh")
WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 
Автор
P

persk

Новичок
Сообщения
4
Репутация
0
Помогите пожалуйста с кодом, хотя бы примерно, или разделами в документации
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Готовый модуль логов http://autoit-script.ru/index.php/topic,69.msg285.html#msg285
Для поиска:
Код:
StringInStr()
StringRegExp()

Для получения информации со страницы:
Код:
_IEBodyReadHTML()
_IEBodyReadText()

(если кликнуть по названиям - то перейдете в справку)
Примеры нажатия на кнопку можно найти используя поиск по форуму
 
Автор
P

persk

Новичок
Сообщения
4
Репутация
0
что то получается вроде бы, но вот с циклом обновления не могу разобраться, как его оформить, чтобы делал рефреш до момента появления кнопки и после нажатия?

Код:
#include <IE.au3>

HotKeySet('{F10}', '_Exit')

Func _Exit()
    Exit
EndFunc

$web_address = InputBox("ввод адреса", "Введите веб-адрес :", "http://", "", 500, 50)
$oIE = _IECreate ($web_address)

;;;;;

_IETagClassClick($oIE, 'a', 'easyui-linkbutton l-btn', 'Добавить')
If @error Then
    If @error > 1 Then
       While 1
    Sleep(10000)  ; пауза между обновлениями в миллисекундах
    _IEAction($oIE, "refresh") ; Кусок для обновления страницы
WEnd                           ;

    Else
        MsgBox(16, 'Error', 'Ошибка выполнения функции')
    EndIf
Else
    MsgBox(64, 'Info', 'OK')
 EndIf
 
 Func _IETagClassClick($o_Obj, $s_TagName, $s_ClassName, $s_Innertext = '')
    Local $o_Tags
    If Not IsObj($o_Obj) Then Return SetError(1)
    If (Not $s_TagName Or Not $s_ClassName) Then Return SetError(1)
    $o_Tags = _IETagNameGetCollection($o_Obj, $s_TagName)
    If @error Then Return SetError(1)
    For $o_Tag In $o_Tags
        If $o_Tag.ClassName == $s_ClassName Then
            If $s_Innertext Then
                If $o_Tag.innertext == $s_Innertext Then
                    _IEAction($o_Tag, 'click')
                    If @error Then Return SetError(1)
                    _IELoadWait($o_Obj)
                    If @error Then Return SetError(1)
                    Return SetError(0)
                EndIf
            Else
                _IEAction($o_Tag, 'click')
                If @error Then Return SetError(1)
                _IELoadWait($o_Obj)
                If @error Then Return SetError(1)
                Return SetError(0)
            EndIf
        EndIf
    Next
    Return SetError(2)
EndFunc   ;==>_IETagClassClick
;;;;;;
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
В цикл нужно добавить проверку на содержание строки в странице одним/несколькими из предложенных мной способов
 

rufik

Новичок
Сообщения
33
Репутация
4
попробуйте
Код:
#include <IE.au3>

HotKeySet('{F10}', '_Exit')

Func _Exit()
    Exit
EndFunc

$web_address = InputBox("ввод адреса", "Введите веб-адрес :", "http://", "", 500, 50)
$oIE = _IECreate ($web_address)

While 1
send('{F5}')
_IELinkClickByText($oIE, "Добавить")
_IELinkClickByText($oIE, "Сохранить")
sleep(10000)
Wend
 
Автор
P

persk

Новичок
Сообщения
4
Репутация
0
rufik, спасибо!
Изначально не внимательно понял алгоритм, усложнилась слегка задача. Нужно в самом начале, только при появлении параметра "Жёлтый" в колонке "Цвета",
Код:
<td field="w"><div class="datagrid-cell " style="width:99px;text-align:left;height:auto;">Жёлтый</div></td>
, навести фокус мыши на эту строку в таблице, нажать один раз на эту строчку и только потом "Добавить" и "Сохранить". При отсутствии этого параметра, только обновлять до появления.

d25d2a20f076.jpg


+
подскажите пожалуйста, как прописать горячую клавишу для остановки/последующего старта скрипта, чтобы при выполнении в любой момент нажать.
 

BadVolt

Новичок
Сообщения
8
Репутация
1
Почитал твою тему.. Понял что головная боль у нас с тобой одна. Судя по твоему коду "datagrid-cell", твой кабинет сделан тоже на jQuery EasyUI. Если не тот же самый... ;)
 
Верх