Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Поиск слова в исходном коде html страницы?????? (http://forum.oszone.net/showthread.php?t=176100)

klsorat2010 19-05-2010 23:27 1417090

Поиск слова в исходном коде html страницы??????
 
Народ, помогите пожалуйста, для диплома надо. Короче надо реализовать скрипт (на любом языке) который бы осуществлял поиск определенного слова в коде страницы, если находит то открывает одну ссылку, если нет другую. Скрипт должен запускаться по нажатию кнопки, заранее всем спасибо!

madmasles 20-05-2010 07:24 1417203

klsorat2010,
Вы конкретную задачу поставьте. Т.е. страница - http://адрес/, если находим "нужное слово" в коде, то делаем "действие-1", если не находим, то делаем "действие-2". И так далее. Где кнопка должна быть, и т.д. и т.п.

klsorat2010 20-05-2010 12:53 1417349

Вложений: 2
Хорошо, давайте по пунктам.

1. Есть сайт с модулем тестирования, по прохождения которого открывается страница:


2. Поиск я думаю можно производить по значению параметра "Результат" (сдан, не сдан):


3. Если "не сдан", то открывается картинка по адресу "http://demo/images/stories/zapret_dostupa.jpg":


4. Если "сдан", то открывается htatest.hta файл по адресу "c:\WebServers\home\demo\www\htatest.hta":


5. В ниже приведеном коде hta файла, производится запуск блокнота из папки windows, надо переделать для запуска какой нибудь программы из Program Files, нк например WINRAR'a.

6. Еще желательно что бы окно открывающееся по адресу "c:\WebServers\home\demo\www\htatest.hta" имело фиксированный размер.
Вроде все, заранее спасибо за помощь.

7. Исходный код страницы и hta файла смотрите во вложенных файлах.

P.S. Сайт находится на локальном компьютере, т.е. localhost

madmasles 20-05-2010 15:06 1417437

klsorat2010,
Давайте тоже по пунктам, как я понял.
1. При запуске нашей программки открывается окно (примерно как на скриншоте-1), в котором открывается нужный нам сайт.
2. Я нарисовал 2 кнопки, но можно сделать сколько надо. Какие конкретно действия должны происходить при нажимании на них.

Все эти данные можно мне в ПМ.

klsorat2010 20-05-2010 16:32 1417499

По нажатию на кнопку, должен запускаться скрипт, который производит поиск определенного слова в исходном коде страницы ("Сдал" например), если это слово присутствует, то производится открытие страницы по адресу "c:\WebServers\home\demo\www\htatest.hta", на этой странице пользователь уже может запустить нужную мне программу (желательно что бы после запуска этой программы, страница htatest.hta закрывалась бы), НО, если скрипт после поиска в коде НЕ НАХОДИТ слово "Сдал", то открывается рисунок по адресу "http://demo/images/stories/zapret_dostupa.jpg". Вроде все предельно понятно, заранее спасибо за помощь.

beve 21-05-2010 02:17 1417821

Цитата:

Цитата klsorat2010
который производит поиск определенного слова в исходном коде страницы ("Сдал" например) »

Я еще уточню один нюанс для madmasles-а, или для других, слово, которое нужно будет искать на странице будет в одном екземпляре?

Sp01LeR 21-05-2010 02:36 1417830

Цитата:

Тип файла: txt исходный код.txt
Jumla на локалхосте под тесты? :drug:
Цитата:

htafile_.hta.txt
теперь я понял, зачем вам запуск через проги .hta - иначе браузер показывает окно с подтверждением открыть/сохранить файл и с абсолютными путями тоже гемморой...

Для AutoIT это конечно не проблема(разве что меня смущает динамический TITLE)...

Цитата:

"c:\WebServers\home\demo\www\htatest.hta"
А у вас на каждом компе Денвер установлен? :o

klsorat2010 21-05-2010 11:49 1418031

Да, слово которое нужно будет искать в одном экземпляре, либо "Сдал" либо "Не сдал"

Нет, Денвер не на каждом компе, да это и не важно, главное что бы все работало на одной машине.

Так кто нибудт поможет или как?

madmasles 21-05-2010 13:26 1418115

klsorat2010,
Примерно так у меня получилось:
читать дальше »
Код:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

_IEErrorHandlerRegister()

$oIE = _IECreateEmbedded()
$hForm = GUICreate("Супер-пупер программа", 640, 580, _
        (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, _
        $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
$GUIActiveX = GUICtrlCreateObj($oIE, 5, 5, 630, 520)
$GUI_Button_Test = GUICtrlCreateButton("Пройти тест", 55, 530, 150, 30)
$GUI_Button_Check = GUICtrlCreateButton("Проверить результат", 245, 530, 150, 30)
GUICtrlSetState(-1, $GUI_DISABLE)
$GUI_Button_Home = GUICtrlCreateButton("Домой", 435, 530, 150, 30)
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState()

_IENavigate($oIE, "http://www.mail.ru/")

While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            Exit
        Case $msg = $GUI_Button_Test
            _IENavigate($oIE, "http://forum.oszone.net/")
            GUICtrlSetState($GUI_Button_Check, $GUI_ENABLE)
        Case $msg = $GUI_Button_Check
            GUICtrlSetState($GUI_Button_Check, $GUI_DISABLE)
            GUICtrlSetState($GUI_Button_Test, $GUI_DISABLE)
            $sText = _IEBodyReadText($oIE)
            If StringInStr($sText, "Забыли пароль") <> 0 Then
                MsgBox(266256, "Ошибка!", "Вы или не зарегистрированы, или забыли войти")
            Else
                If MsgBox(266308, "Успех!", "Вы успешно вошли в форум!" & @CRLF & @CRLF & _
                        "Открыть блокнот?") = 6 Then Run("notepad")
            EndIf
            GUICtrlSetState($GUI_Button_Home, $GUI_ENABLE)
        Case $msg = $GUI_Button_Home
            GUICtrlSetState($GUI_Button_Home, $GUI_DISABLE)
            _IENavigate($oIE, "http://www.mail.ru/")
            GUICtrlSetState($GUI_Button_Test, $GUI_ENABLE)
    EndSelect
WEnd


klsorat2010 21-05-2010 13:28 1418117

Цитата:

Цитата madmasles
klsorat2010,
Примерно так у меня получилось:
читать дальше » »

И что это? Ссылк аведет на эту же страницу

kaster 21-05-2010 13:50 1418136

klsorat2010, это не ссылка а раскрывающийся блок текста в котором код. вот такой
Код:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

_IEErrorHandlerRegister()

$oIE = _IECreateEmbedded()
$hForm = GUICreate("Супер-пупер программа", 640, 580, _
        (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, _
        $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
$GUIActiveX = GUICtrlCreateObj($oIE, 5, 5, 630, 520)
$GUI_Button_Test = GUICtrlCreateButton("Пройти тест", 55, 530, 150, 30)
$GUI_Button_Check = GUICtrlCreateButton("Проверить результат", 245, 530, 150, 30)
GUICtrlSetState(-1, $GUI_DISABLE)
$GUI_Button_Home = GUICtrlCreateButton("Домой", 435, 530, 150, 30)
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState()

_IENavigate($oIE, "http://www.mail.ru/")

While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            Exit
        Case $msg = $GUI_Button_Test
            _IENavigate($oIE, "http://forum.oszone.net/")
            GUICtrlSetState($GUI_Button_Check, $GUI_ENABLE)
        Case $msg = $GUI_Button_Check
            GUICtrlSetState($GUI_Button_Check, $GUI_DISABLE)
            GUICtrlSetState($GUI_Button_Test, $GUI_DISABLE)
            $sText = _IEBodyReadText($oIE)
            If StringInStr($sText, "Забыли пароль") <> 0 Then
                MsgBox(266256, "Ошибка!", "Вы или не зарегистрированы, или забыли войти")
            Else
                If MsgBox(266308, "Успех!", "Вы успешно вошли в форум!" & @CRLF & @CRLF & _
                        "Открыть блокнот?") = 6 Then Run("notepad")
            EndIf
            GUICtrlSetState($GUI_Button_Home, $GUI_ENABLE)
        Case $msg = $GUI_Button_Home
            GUICtrlSetState($GUI_Button_Home, $GUI_DISABLE)
            _IENavigate($oIE, "http://www.mail.ru/")
            GUICtrlSetState($GUI_Button_Test, $GUI_ENABLE)
    EndSelect
WEnd


gregaz 21-05-2010 13:56 1418141

Цитата:

Цитата klsorat2010
И что это? Ссылк аведет на эту же страницу »

там просто раскрывающийся блок с кодом того, что тебе надо

Iska 21-05-2010 14:32 1418174

Цитата:

Цитата klsorat2010
И что это? Ссылка ведет на эту же страницу »

Разрешите в Вашем браузере исполнение скриптов для домена «forum.oszone.net» (а лучше сразу для «oszone.net»).

klsorat2010 21-05-2010 15:58 1418276

спасибо конечно, тока я не вижу где же сам поиск слова то?

madmasles 21-05-2010 16:06 1418281

klsorat2010,
Код:

$sText = _IEBodyReadText($oIE)
Читаем с окна IE тот текст, который сами видим на экране.
Код:

If StringInStr($sText, "Забыли пароль") <> 0 Then
                MsgBox(266256, "Ошибка!", "Вы или не зарегистрированы, или забыли войти")
            Else
                If MsgBox(266308, "Успех!", "Вы успешно вошли в форум!" & @CRLF & @CRLF & _
                        "Открыть блокнот?") = 6 Then Run("notepad")
            EndIf

Если находим на экране текст "Забыли пароль", то "Ошибка!", если не находим, то "Успех!" и вопрос - "Открыть блокнот?". Если "Да", то открываем блокнот.
Вы попробуйте выйти из учетной записи и проверить скрипт, потом войти на форум и опять проверить скрипт.

klsorat2010 21-05-2010 16:11 1418289

madmasles спасибо, тока как мне это в html то впихнуть?

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

madmasles 21-05-2010 16:46 1418310

klsorat2010,
А зачем его запихивать в html? Он и так работает (у меня). Попробуйте вставить свои ссылки, свое слово для поиска, свою программу для запуска.
У меня на Win XP блокнот открывает, попробуйте в самой первой строке написать #RequireAdmin, если у Вас Vista или 7.

У меня работает с вашими файлами (я их переименовал на расширение .html) и с такой ссылкой: file://localhost/C:/исходный%20код.html, и с такой: C:\htafile_.hta.html.

klsorat2010 21-05-2010 17:37 1418338

чет я не пойму, а какое тогда расширение ставить если не html?

madmasles 21-05-2010 17:49 1418340

klsorat2010,
Вы имеете в виду расширение самого скрипта? Его расширение должно быть .au3

klsorat2010 21-05-2010 17:54 1418345

#RequireAdmin
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

перед "#RequireAdmin " #include не надо?

и как его тогда запускать если он .au3?

madmasles 21-05-2010 17:58 1418348

klsorat2010,
Нет. У вас все правильно.

klsorat2010 21-05-2010 18:00 1418349

каким образом его запустить?

madmasles 21-05-2010 18:03 1418350

klsorat2010,
У Вас AutoIt установлен?

klsorat2010 21-05-2010 18:04 1418351

вот так "AutoIt3X.RunScript('c:\myscript.au3')"?

нет, без него ни как да?

madmasles 21-05-2010 18:07 1418354

klsorat2010,
Я Вам чуть позже все, что надо пришлю.

klsorat2010 21-05-2010 18:11 1418356

madmasles спасибо, буду примного благодарен

madmasles 21-05-2010 18:32 1418367

klsorat2010,
Вот тут: My_First_AutoIt_Script все, что Вам нужно лежит. Запустите скрипт батником.

klsorat2010 21-05-2010 18:38 1418369

madmasles спасибо, с этим я уже разобрался, сам запустил, тока у меня пару вопросов:

1. как растянуть это все на весь экран?
2. какой адрес мне написать если у меня сайт на локальном хосте?
и еще можно ли сделать что бы кнопка "проверить результат", становилас активной только на опреденой странице/цах?

madmasles 21-05-2010 19:40 1418397

klsorat2010,
На весь экран развернуть можно так:
Код:

;...
$hForm = GUICreate("Супер-пупер программа", @DesktopWidth, @DesktopHeight, _
        0, 0, _
        $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
$GUIActiveX = GUICtrlCreateObj($oIE, 5, 5, @DesktopWidth - 10, @DesktopHeight - 150)
$GUI_Button_Test = GUICtrlCreateButton("Пройти тест", @DesktopWidth / 2 - 250, @DesktopHeight - 100, 150, 30)
$GUI_Button_Check = GUICtrlCreateButton("Проверить результат", @DesktopWidth / 2 - 50, @DesktopHeight - 100, 150, 30)
GUICtrlSetState(-1, $GUI_DISABLE)
$GUI_Button_Home = GUICtrlCreateButton("Домой", @DesktopWidth / 2 + 150, @DesktopHeight - 100, 150, 30)
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState()
;...

Про адреса локальных ссылок я уже говорил:
Цитата:

У меня работает с вашими файлами (я их переименовал на расширение .html) и с такой ссылкой: file://localhost/C:/исходный%20код.html, и с такой: C:\htafile_.hta.html.
Чтобы сделать кнопку Проверить результат активной после открытия нужной Вам странице попробуйте так:
Код:

;...
_IENavigate($oIE, "нужная Вам страница")
GUICtrlSetState($GUI_Button_Check, $GUI_ENABLE)
;...


klsorat2010 21-05-2010 19:46 1418400

Спасибо Вам, Очень помогли!

klsorat2010 21-05-2010 20:06 1418406

последний вопрос, куда именно надо вставить

HTML код:

;... _IENavigate($oIE, "нужная Вам страница")
GUICtrlSetState($GUI_Button_Check, $GUI_ENABLE) ;...

там же уже есть адресс

HTML код:

Case $msg = $GUI_Button_Test           
_IENavigate($oIE, "http://demo/")           
GUICtrlSetState($GUI_Button_Check, $GUI_ENABLE)


madmasles 21-05-2010 20:07 1418407

klsorat2010,
Чтобы скрипт не реагировал на кликанье по иконке в трее добавьте:
Код:

;...
#include <IE.au3>

Opt("TrayMenuMode", 1)
;...

Цитата:

Цитата klsorat2010
Case $msg = $GUI_Button_Test
_IENavigate($oIE, "http://demo/")
GUICtrlSetState($GUI_Button_Check, $GUI_ENABLE) »

Вы, когда перешли на страницу http://demo/, что-то делаете в ней?

klsorat2010 21-05-2010 21:54 1418471

Вы, когда перешли на страницу http://demo/, что-то делаете в ней?

ну там после нне пару страниц еще идет, а потом начинается тестирование и выводится результат на странице

HTML код:

http://demo/index.php?option=com_ariquiz&task=quiz_finished&ticketId=d2d6141dd5c7d42b1fef78ed32fbee69&Itemid=8
вот именно на этой странице мне и надо что бы кнопка работала, на остальных нет

madmasles 21-05-2010 22:17 1418486

klsorat2010,
Так попробуйте:
Код:

;...
Case $msg = $GUI_Button_Test
    _IENavigate($oIE, "http://demo/")
    While 1
        Sleep(100)
        $sTestURL = _IEPropertyGet($oIE, "locationurl")
        If $sTestURL = "http://demo/index.php?option=com_ariquiz&task=quiz_finished&ticketId=d2d6141dd5c7d42b1fef78ed32fbee69&Itemid=8" Then ExitLoop
    WEnd
    GUICtrlSetState($GUI_Button_Check, $GUI_ENABLE)
Case $msg = $GUI_Button_Check
;...


klsorat2010 22-05-2010 12:28 1418723

madmasles спасибо, а если мне на нескольких страницах такое надо проделать, можно что нибудь придумать?

madmasles 22-05-2010 12:38 1418726

klsorat2010,
Можно, только надо знать, что конкретно придумать. :)

klsorat2010 22-05-2010 12:51 1418731

Мне надо что бы кнопка проверки работала на 6 страница, цифровая часть этих адресов всегда меняется, но буквенная всегда одна и та же:
HTML код:

http://demo/index.php?option=com_ariquiz&task=quiz_finished&ticketId=ЭТА_ЧАСТЬ_ВСЕГДА_РАЗНАЯ=8
Можно ли задать часть адреса страницы?

Тогда и 6 страниц не надо, только одна, но не точное значение страницы, а только часть.

madmasles 22-05-2010 13:10 1418740

klsorat2010,
А перед появлением любой из этих 6-ти страниц другие страницы будут? Если будут, то на них кнопка Проверка теста должна быть активной или нет?

klsorat2010 22-05-2010 13:17 1418742

да, перед появлением этих 6 страниц другие страницы конечно есть, НО на них кнопка проверка теста НЕ должна быть активной.
Кстати эти 6 страниц идут не последовательно, между ними тоже есть пара тройк других страниц на которых кнопка не должна работать

klsorat2010 22-05-2010 14:29 1418765

ответьте пожалуйста, обещаю это был последний вопрос :)

madmasles 22-05-2010 14:32 1418767

klsorat2010,
Чего-то мне не придумать как это сделать.
Как я понимаю, 6 страниц это 6 тестов. Может быть, окно IE сделать не активным и нарисовать 6 кнопок "Пройти тест 1", ..., "Пройти тест 6", и управлять всеми действиями только кнопками? Можно сделать так, чтобы эти кнопки появлялись по очереди, т.е, прошел тест1, появился тест2 и т.д., а в конце - статистика "Вы прошли 2 теста из 6, Ваша оценка твердый тройбан". И, в зависимости от оценки, открывать разные программы. :)

klsorat2010 22-05-2010 14:37 1418774

нет, дело в том что все тесты там уже реализованы на web технологиях, сам тест это компонент тестирования, он стоит на jooml'е она в свою очередь на denwer'e, переделывать все под эти кнопки геморойно, да и нет смысла уже, помойму легче придумать ка спрятать эту кнопку до определенного момента. Ну неужели Вы правда ничего придумать не можете, я бы и сам подумал, но я этот Autoit установил тока вчера и раньше дела ни с ним не имел, а как следствие и с его функциями и переменными, а Вы же вроде уже подкованный человек в этом дела?

Слушайте а может тогда сделать 3 условия для поиска а не 2?

Т.е. если находит "Не сдан", то "сообщение об ошибке", если находит "Сдан", то "Сообщение об удачном прохождении и предложения о запуске программы" (кстати нельзя ли автоматом ее запускать после, ну например прохождения 2-3 сек отображения этого сообщения?) и третий вариант, если не находит не того ни другого, тогда третье сообщение.

Думаю третье условие впихнуто не так сложно?

klsorat2010 22-05-2010 15:32 1418797

Или как вариант, может можно сделать, что бы кнопка отображалась при условии нахождения на странице слова "Результата"?

Спасибо со скрытием кнопки я уже сам разобрался, но остался вопрос об автоматическом запуске программы после отображения окна об успешном прохождении теста

madmasles 22-05-2010 16:39 1418822

klsorat2010,
Вот что у меня получилось. При активации кнопки Проверка теста окно с IE становится не активным до тех пор, пока на кнопку не нажмешь.
Код:

#RequireAdmin
#include "GUIConstantsEx.au3"
#include "WindowsConstants.au3"
#include "IE.au3"

Opt("TrayMenuMode", 1)

_IEErrorHandlerRegister()

$oIE = _IECreateEmbedded()
$hForm = GUICreate("Автоматизированная система обучения.", @DesktopWidth, @DesktopHeight, 0, 0, -1, $WS_EX_TOOLWINDOW)
GUISetBkColor(0x99CCFF)
$GUIActiveX = GUICtrlCreateObj($oIE, 5, 5, @DesktopWidth - 10, @DesktopHeight - 150)
$GUI_Button_Test = GUICtrlCreateButton("Запустить АСО", @DesktopWidth / 2 - 250, _
        @DesktopHeight - 100, 150, 30)
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlSetBkColor(-1, 0xFFCCFF)
GUICtrlSetFont(-1, 11, 600, 2, "Arial")
GUICtrlSetCursor(-1, 0)
GUICtrlSetTip(-1, "Перейти на страницы прохождения тестов.")
$GUI_Button_Check = GUICtrlCreateButton("Запустить MatLab", @DesktopWidth / 2 + 100, _
        @DesktopHeight - 100, 150, 30)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetBkColor(-1, 0xFFCCFF)
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlSetFont(-1, 11, 600, 2, "Arial")
GUICtrlSetCursor(-1, 0)
GUICtrlSetTip(-1, "Проверить результат теста.")

DllCall("User32.dll", "long", "AnimateWindow", "hwnd", $hForm, "long", 1000, "long", 0x10)
GUISetState()

_IENavigate($oIE, "C:/proba.jpg")

While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            DllCall("User32.dll", "long", "AnimateWindow", "hwnd", $hForm, "long", 1000, "long", _
                    0x10 + 0x10000)
            Exit
        Case $msg = $GUI_Button_Test
            GUICtrlSetState($GUI_Button_Test, $GUI_DISABLE)
            _IENavigate($oIE, "http://demo/")
            _ControlTest()
        Case $msg = $GUI_Button_Check
            _ControlTest()
            GUICtrlSetState($GUI_Button_Check, $GUI_DISABLE)
            $sText = _IEBodyReadText($oIE)
            ;##########################################################################################
            If StringInStr($sText, "Не сдан") <> 0 Then
                $iMsgBoxAnswer1 = MsgBox(266257, "Внимание!", "Вы не прошли этот тест." & @CRLF _
                        & @CRLF & "ОК - продолжить прохождение тестов." & _
                        @CRLF & "Отмена - вернуться на домашнюю страницу." & @CRLF & _
                        "У вас есть 5 секунд для выбора", 5)
                Select
                    Case $iMsgBoxAnswer1 = 1 Or $iMsgBoxAnswer1 = -1;OK
                        _IEAction($oIE, "back")
                        GUICtrlSetState($GUIActiveX, $GUI_ENABLE)
                        _ControlTest()
                    Case $iMsgBoxAnswer1 = 2 ;Cancel
                        _IENavigate($oIE, "http://demo/index.php?option=com_ariquiz&Itemid=8")
                        GUICtrlSetState($GUIActiveX, $GUI_ENABLE)
                        GUICtrlSetState($GUI_Button_Test, $GUI_ENABLE)
                EndSelect
            Else
                $iMsgBoxAnswer = MsgBox(266275, "Успех!", "Вы успешно прошли этот тест!" & @CRLF _
                        & @CRLF & "Да - открыть архиватор WinRAR и продолжить прохождение тестов." & _
                        @CRLF & "Нет - продолжить прохождение тестов" & @CRLF & _
                        "Отмена - вернуться на домашнюю страницу." & @CRLF & _
                        "У вас есть 5 секунд для выбора", 5)
                Select
                    Case $iMsgBoxAnswer = 6 ;Yes
                        Run(@ProgramFilesDir & "\WinRAR\WinRAR.exe")
                        _IEAction($oIE, "back")
                        GUICtrlSetState($GUIActiveX, $GUI_ENABLE)
                        _ControlTest()
                    Case $iMsgBoxAnswer = 7 Or $iMsgBoxAnswer = -1 ;No
                        _IEAction($oIE, "back")
                        GUICtrlSetState($GUIActiveX, $GUI_ENABLE)
                        _ControlTest()
                    Case $iMsgBoxAnswer = 2 ;Cancel
                        _IENavigate($oIE, "http://demo/index.php?option=com_ariquiz&Itemid=8")
                        GUICtrlSetState($GUIActiveX, $GUI_ENABLE)
                        GUICtrlSetState($GUI_Button_Test, $GUI_ENABLE)
                EndSelect
            EndIf
            ;##########################################################################################
    EndSelect
WEnd

Func _ControlTest()
    While 1
        Local $sUrl = _IEPropertyGet($oIE, "locationurl")
        If StringInStr($sUrl, _
                "http://demo/index.php?option=com_ariquiz&task=quiz_finished&ticketId=") _
                <> 0 Then
            GUICtrlSetState($GUI_Button_Check, $GUI_ENABLE)
            GUICtrlSetState($GUIActiveX, $GUI_DISABLE)
            Return
        EndIf
        Sleep(100)
    WEnd
EndFunc  ;==>_ControlTest


klsorat2010 22-05-2010 16:46 1418825

madmasles,
спасибо, с кнопкой я разобрался, а как насчет автоматического запуск программы после сообщения об успешном прохождениии теста, без возможности какого либо выбора, сдал тест, нажал кнопку о проверке, увидел сообщении об успешной сдаче, 3-4 сек, запустилась програма

и еще, у меня вместо первой страницы стоит
Код:

_IENavigate($oIE, "C:/proba.jpg")
как сделать так что бы кнопка "$GUI_Button_Test" былак активной только на этой странице?

madmasles 22-05-2010 17:15 1418843

Цитата:

Цитата klsorat2010
запустилась програма »

А после запуска программы какие действия?
Кнопка "$GUI_Button_Test" в моем коде и так только на первой странице активна.

klsorat2010 22-05-2010 18:47 1418886

У меня кнопка $GUI_Button_Test = GUICtrlCreateButton("Запустить АСО", @DesktopWidth / 2 - 250, @DesktopHeight - 100, 150, 30) активна все время.
И еще надо бы реализовать кнопку выхода из программы.

Код:

#RequireAdmin 
#include <GUIConstantsEx.au3>
 #include <WindowsConstants.au3>
 #include  <IE.au3>   

Opt("TrayMenuMode", 1)   
_IEErrorHandlerRegister() 
 $oIE = _IECreateEmbedded() 
$hForm = GUICreate("Автоматизированная сисиема обучения", @DesktopWidth, @DesktopHeight, _          0, 0, _       
  $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN) 
$GUIActiveX = GUICtrlCreateObj($oIE, 5, 5, @DesktopWidth - 10, @DesktopHeight - 150) 
$GUI_Button_Test = GUICtrlCreateButton("Запустить АСО", @DesktopWidth / 2 - 250, @DesktopHeight - 100, 150, 30) 
$GUI_Button_Check = GUICtrlCreateButton("Запустить MatLab", @DesktopWidth / 2 - 50, @DesktopHeight - 100, 150, 30)  GUICtrlSetState(-1, $GUI_DISABLE)
 $GUI_Button_Home = GUICtrlCreateButton("Начать заново", @DesktopWidth / 2 + 150, @DesktopHeight - 100, 150, 30)  GUICtrlSetState(-1, $GUI_DISABLE)  GUISetState() 
 _IENavigate($oIE, "C:/proba.jpg") 
 While 1      $msg = GUIGetMsg()      Select       
  Case $msg = $GUI_EVENT_CLOSE           
  Exit       
 Case $msg = $GUI_Button_Test             
_IENavigate($oIE, "http://demo/")                         
While 1                   
 Sleep(100)                   
 $sText = _IEBodyReadText($oIE)                   
 If StringInStr($sText, "Quiz Result") <> 0 Then ExitLoop             
WEnd              GUICtrlSetState($GUI_Button_Check, $GUI_ENABLE)       
 Case $msg = $GUI_Button_Check           
 GUICtrlSetState($GUI_Button_Check, $GUI_DISABLE)           
 GUICtrlSetState($GUI_Button_Test, $GUI_DISABLE)           
 $sText = _IEBodyReadText($oIE)           
 If StringInStr($sText, "Не сдан") <> 0 Then               
 MsgBox(266256, "Внимание!", "Вы не прошли тестирование, запуск не возможен!")           
 Else               
  If MsgBox(266308, "Поздравляем!", "Вы успешно прошли тестирование") <> 0 Then                                     
 Run("c:\Program Files\WinRAR\WinRAR.exe")                                         
EndIf           
 EndIf           
 GUICtrlSetState($GUI_Button_Home, $GUI_ENABLE)                 
Case $msg = $GUI_Button_Test                 
GUICtrlSetState($GUI_Button_Home, $GUI_ENABLE)             
_IENavigate($oIE, "C:/proba.jpg")           
  GUICtrlSetState($GUI_Button_Test, $GUI_DISABLE)       
 Case $msg = $GUI_Button_Home             
GUICtrlSetState($GUI_Button_Home, $GUI_DISABLE)           
 _IENavigate($oIE, "http://demo/index.php?option=com_ariquiz&Itemid=8")           
  GUICtrlSetState($GUI_Button_Test, $GUI_ENABLE)   
 EndSelect 
WEnd


madmasles 22-05-2010 19:52 1418913

klsorat2010,
Вы код обрамляйте тегом код (#). Вы мой последний вариант не смотрели?

Цитата:

Цитата klsorat2010
а как насчет автоматического запуск программы после сообщения об успешном прохождениии теста, без возможности какого либо выбора »

Цитата:

Цитата madmasles
А после запуска программы какие действия? »

Вопрос остается открытым.

klsorat2010 22-05-2010 20:48 1418941

у меня не открываются эти долбаные кавычки. Какой вопрос остается открытым? После запуска программы по кнопке начать тестирование, она так же остается активной.

madmasles 22-05-2010 21:06 1418955

Цитата:

Цитата klsorat2010
а как насчет автоматического запуск программы после сообщения об успешном прохождениии теста, без возможности какого либо выбора, сдал тест, нажал кнопку о проверке, увидел сообщении об успешной сдаче, 3-4 сек, запустилась програма »

В третий раз спрашиваю: увидел сообщение об успешной сдаче, 3-4 сек, запустилась программа дальше какие действия?

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

klsorat2010 22-05-2010 23:02 1419020

Цитата:

Цитата madmasles
Цитата klsorat2010:а как насчет автоматического запуск программы после сообщения об успешном прохождениии теста, без возможности какого либо выбора, сдал тест, нажал кнопку о проверке, увидел сообщении об успешной сдаче, 3-4 сек, запустилась програма » »

я еще раз говорю, у меня не открываются эти кавычки.

В третий раз спрашиваю: увидел сообщение об успешной сдаче, 3-4 сек, запустилась программа дальше какие действия, дальше? ну пускай открывается какая нибудь старница, или вообще ничего, в принципе это особо не важно.

madmasles 22-05-2010 23:23 1419040

klsorat2010,
Я не понял, какие кавычки у Вас не открываются?

klsorat2010 22-05-2010 23:36 1419048

Цитата:

Цитата klsorat2010
Цитата madmasles:Цитата klsorat2010:а как насчет автоматического запуск программы после сообщения об успешном прохождениии теста, без возможности какого либо выбора, сдал тест, нажал кнопку о проверке, увидел сообщении об успешной сдаче, 3-4 сек, запустилась програма » » »

Которые в конце этого поста, и в которых как я понял код который осуществляет запуск программы без участия пользователя

madmasles 23-05-2010 00:18 1419063

klsorat2010,
Вот в этом посте на 5-ой странице код, про который я говорю:
http://forum.oszone.net/post-1418822.html#post1418822


PS
klsorat2010,
Я немного поправил код. Там сейчас вариант, в котором у пользователя есть выбор действий после проверки теста. Если хотите сделать без участия пользователя, то замените кусок кода между такими зелеными полосками:
Код:

;############################################################
На этот:
Код:

If StringInStr($sText, "Не сдан") = 0 Then
    SplashTextOn("Поздравляем!", "Вы успешно прошли тестирование. Сейчас будет запущен архиватор WinRAR." _
            , 250, 80, -1, -1, 16, "Arial", 11, 600)
    Sleep(5000)
    SplashOff()
    Run(@ProgramFilesDir & "\WinRAR\WinRAR.exe")
    _IENavigate($oIE, "http://demo/index.php?option=com_ariquiz&Itemid=8")
    GUICtrlSetState($GUIActiveX, $GUI_ENABLE)
    GUICtrlSetState($GUI_Button_Test, $GUI_ENABLE)
Else
    SplashTextOn("Внимание!", "Вы не прошли тестирование, запуск не возможен!" _
            , 250, 80, -1, -1, 16, "Arial", 11, 600)
    Sleep(5000)
    SplashOff()
    _IENavigate($oIE, "http://demo/index.php?option=com_ariquiz&Itemid=8")
    GUICtrlSetState($GUIActiveX, $GUI_ENABLE)
    GUICtrlSetState($GUI_Button_Test, $GUI_ENABLE)
EndIf


klsorat2010 23-05-2010 01:37 1419098

Спасибо, завтра посмотрю что получилось.

У меня тут возник еще один вопрос, как вы заметели у меня в начале в оболочке выводится рисунок, можно ли вместо него вствить видео, это чисто в познавательных целях :)

И как убрать синию полосу снижу и вернуть кнопки к стилю по умолчанию ,какими они были в начале?

madmasles 23-05-2010 07:18 1419144

Цитата:

Цитата klsorat2010
можно ли вместо него вствить видео »

У меня IE не открывает .avi. Попробуйте с флеш поиграться.
Цитата:

Цитата klsorat2010
убрать синию полосу снижу и вернуть кнопки к стилю по умолчанию »

Вы справку посмотрите по этим функциям. Или в английской, что лучше, или в русской. Русская во многом устарела, но другой пока нет. С цветом можете поэкспериментировать.

klsorat2010 23-05-2010 17:38 1419360

а куда этот номер цвета вставлять? я че то не нашел?

madmasles 23-05-2010 18:07 1419377

klsorat2010,
Код:

;...
GUICreate("", 200, 100) ;создать окно.
GUISetBkColor(0x99CCFF) ;указать фоновый цвет окна.
;...
GUICtrlCreateButton("ОК", 250, 100, 150, 30);создать кнопку.
GUICtrlSetColor(-1, 0x0000FF) ;цвет надписи на кнопке.
GUICtrlSetBkColor(-1, 0xFFCCFF) ;цвет фона кнопки.
GUICtrlSetFont(-1, 11, 600, 2, "Arial") ;шрифт надписи на кнопке.
GUICtrlSetCursor(-1, 0) ;вид курсора при наведении на кнопку.
GUICtrlSetTip(-1, "Перейти на страницы прохождения тестов.") ;подсказка при наведении на кнопку.
;...


klsorat2010 24-05-2010 13:16 1419878

после нажатия на кнопку запустить MatLab появляется ошибка:

[IMG][/IMG]

klsorat2010 24-05-2010 14:31 1419950

Все разобрался :)

madmasles 24-05-2010 15:07 1419979

klsorat2010,
Это я забыл скобку поставить.

klsorat2010 24-05-2010 16:31 1420043

Тут еще проблема появилась, если запустить скрипт, а потом сразу его закрыть, то все нормально, но если поработать в нем некоторое время, то кнопка закрытия программы не реагирует, т.е. она нажимается но толку ноль, помогает только завершение процесса Autoit.exe

madmasles 24-05-2010 20:06 1420176

klsorat2010,
Пока какая-либо кнопка не станет активной, идет проверка в цикле и скрипт не реагирует на другие действия. Т.е. закрыть окно можно только тогда, когда активна одна из кнопок.

klsorat2010 24-05-2010 21:08 1420235

Ну так первая кнопка зпускающая первую страницу активна всегда.

madmasles 24-05-2010 21:50 1420269

klsorat2010,
В моем коде кнопка $GUI_Button_Test становится не активной после нажатия на нее и активируется только по возвращению на домашнюю страницу. В Вашем - не знаю.

sergomanov@vk 01-04-2013 07:34 2123239

Не знаю может уже не актуально но нашёл вариант поиска.
<script type="text/javascript">
var lastResFind=""; // последний удачный результат
var copy_page=""; // копия страницы в ихсодном виде
function TrimStr(s) {
s = s.replace( /^\s+/g, '');
return s.replace( /\s+$/g, '');
}
function FindOnPage(inputId) {//ищет текст на странице, в параметр передается ID поля для ввода
var obj = window.document.getElementById(inputId);
var textToFind;

if (obj) {
textToFind = TrimStr(obj.value);//обрезаем пробелы
} else {
alert("Введенная фраза не найдена");
return;
}
if (textToFind == "") {
alert("Вы ничего не ввели");
return;
}

if(document.body.innerHTML.indexOf(textToFind)=="-1")
alert("Ничего не найдено, проверьте правильность ввода!");

if(copy_page.length>0)
document.body.innerHTML=copy_page;
else copy_page=document.body.innerHTML;


document.body.innerHTML = document.body.innerHTML.replace(eval("/name="+lastResFind+"/gi")," ");//стираем предыдущие якори для скрола
document.body.innerHTML = document.body.innerHTML.replace(eval("/"+textToFind+"/gi"),"<a name="+textToFind+" style='background:red'>"+textToFind+"</a>"); //Заменяем найденный текст ссылками с якорем;
lastResFind=textToFind; // сохраняем фразу для поиска, чтобы в дальнейшем по ней стереть все ссылки
window.location = '#'+textToFind;//перемещаем скрол к последнему найденному совпадению
}
</script>

<input type="text" id="text-to-find" value="">
<input type="button" onclick="javascript: FindOnPage('text-to-find'); return false;" value="Искать"/>

Исходник примера: http://adatum.ru/2013/04/01/poisk-i-...tml-stranitse/


Время: 16:34.

Время: 16:34.
© OSzone.net 2001-