-
Добрый день! Имеется ДСЛ_ка, которую периодически нужно перегружать. Делается это путём захода на неё по HTTP протоколу. В общем, по ссылке http://10.1.1.1/resetrouter.html попадаем на страницу с кнопкой Save/Reboot, нажатие на которую и хотелось бы эмулировать. на всякий случай код страницы: <html> <head> <meta HTTP-EQUIV='Pragma' CONTENT='no-cache'> <link rel="stylesheet" href='stylemain.css' type='text/css'> <link rel="stylesheet" href='colors.css' type='text/css'> <script language="javascript"> <!-- hide function btnReset() { var code = 'location="rebootinfo.cgi"'; eval(code); } function frmLoad() { var sysReboot = '0'; var lanRefresh = '0'; if ( sysReboot == '1' ) btnReset(); else if ( lanRefresh == '1' ) { var code = 'location="resetrouter.cgi?lanRefresh=0"'; eval(code); } } // done hiding --> </script> </head> <body onLoad='frmLoad()'> <blockquote> <center> <br> <strong>Click the button below to save and reboot the router.</strong> </blockquote></center> <p align="center"> <input type='button' onClick='btnReset()' value='Save/Reboot'> <br> </p> </body> </html>
-
посмотреть что за скрипт повешен на баттон и выполнить его. скорее всего потребуется предварительно залогинится и получит куку
-
Медвежонок Пятачок © (05.10.10 13:38) [1]ну я так понял, что непосредственно скрипт перезагрузки это: function btnReset() А как его правильно запустить, чтобы он применялся именно к данной странице, и,соответственно, к ДСЛ_ке?
-
А если быть ещё точнее, то непосредственно перегрузку ДСЛ_ки осуществляет команда: eval('location=\"rebootinfo.cgi\"'); Но как её правильно запустить?
-
мозилла + файербуг покажут что и как там отправляется на сервер. наглядно, с возможностью копипасты заголовков и самих данных.
-
Медвежонок Пятачок © (05.10.10 14:02) [4]Это не совсем то, что мне нужно. Мне из программы на Делфи нужно ребутить ДСЛ_ку, путём эмуляции нажатия кнопки на странице по адресу: http://10.1.1.1/resetrouter.html. Есть ли WEB компоненты, позволяющие это делать?
-
это как раз то, что тебе нужно.
Есть ли WEB компоненты, позволяющие это делать? сам-то как думаешь?
PS тебе не надо узнвать как нажать кнопку на веб странице. тебе нужно узнавать какой пост или гет запрос отправить своей коробке.
-
-
Вот этот вариант мне подошёл, если кому нужно, держите: // If there is only one button, you can do something like: WebBrowser1.OleObject.Document.forms.item(0).elements.item(0).click; // This will do a click on the first element of the first <FORM>, where an // element is either <INPUT>, <SELECT> or <TEXTAREA>. // If there is more than one button, you can do something like: procedure TForm1.Button1Click(Sender: TObject);
var
ovElements: OleVariant;
i: Integer;
begin
ovElements := WebBrowser1.OleObject.Document.forms.item(0).elements;
for i := 0 to (ovElements.Length - 1) do
if (ovElements.item(i).tagName = 'INPUT') and
(ovElements.item(i).type = 'SUBMIT') and
(ovElements.item(i).Value = 'Recent Charges') then
ovElements.item(i).Click;
end;
-
и что в итоге? кликал по кнопке в браузере и не нравилось. теперь кликаешь по кнопке в project1.exe в том же веббраузере и нравится.
-
Медвежонок Пятачок © (06.10.10 11:44) [9]
В моём примере, в отличии от браузера, всё программно делается. Автоматом грузится страница, автоматом нажимается кнопка для авторизации, и автоматом нажимается кнопка Save/Reboot.
Т.е. упал инет, нажимаю одну кнопочку и вуаля, ДСЛ_ка перегружена.
-
да понял я, не надо объяснять. это называется через задний проход.
тебе же предлагалось: 1. взять мозилу с плагином firebug и посмотреть там два запроса (авторизация и ресет)
2. тебе не предлагалось ресетить роутер мозиллой.
3. берешь idhttp или idtcpclient и выполняешь два запроса (подсмотренные в п.1)
все. и никаких кнопок и веббраузеров
-
Медвежонок Пятачок © (06.10.10 12:02) [11]
Дело говоришь! И хоть мне не привыкать пяткой ухо чесать, сделаю как положено.
Спасибо!
-
Медвежонок Пятачок © (06.10.10 12:02) [11]
Кстати, я пользуюсь Оперой, в которой есть опция инспектирования объектов. Т.е, как я понял, аналог феирбэга в мозиле.
Дальше логика такова, что посмотрев какой код запускается по нажатию на кнопку, я должен, при помощи idhttp, кодить запуск этого кода применительно именно к этой страничке, с которой он запускается?
-
ну да. только предварительно надо таким же образом посмотреть формат и урл запроса на авторизацию и посмотреть какая кука при этом возвращается роутером. ее надо будет использовать в запросе на ресет, иначе коробка его не обработает как неавторизованный.
-
хмм, там вроде бы через телнет можно выполнить команду, в сети и примеры скриптов есть
-
Всем спасибо. Телнетовские скрипты оказались как нельзя кстати.
-
послать компоненту tab enter =)
|