Конференция "Сети" » Как программно сэмулировать нажатие на кнопку HTML страницы? [D7, WinXP]
 
  • Zheksonz (05.10.10 13:29) [0]
    Добрый день!

    Имеется ДСЛ_ка, которую периодически нужно перегружать. Делается это путём захода на неё по 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]
    посмотреть что за скрипт повешен на баттон и выполнить его.
    скорее всего потребуется предварительно залогинится и получит куку
  • Zheksonz (05.10.10 13:45) [2]
    Медвежонок Пятачок ©   (05.10.10 13:38) [1]

    ну я так понял, что непосредственно скрипт перезагрузки это:

    function btnReset() {
     var code = 'location=\"rebootinfo.cgi\"';
     eval(code);
    }



    А как его правильно запустить, чтобы он применялся именно к данной странице, и,соответственно, к ДСЛ_ке?
  • Zheksonz (05.10.10 13:49) [3]
    А если быть ещё точнее, то непосредственно перегрузку ДСЛ_ки осуществляет команда:
    eval('location=\"rebootinfo.cgi\"');



    Но как её правильно запустить?
  • Медвежонок Пятачок © (05.10.10 14:02) [4]
    мозилла + файербуг покажут что и как там отправляется на сервер.
    наглядно, с возможностью копипасты заголовков и самих данных.
  • Zheksonz (05.10.10 14:23) [5]
    Медвежонок Пятачок ©   (05.10.10 14:02) [4]

    Это не совсем то, что мне нужно. Мне из программы на Делфи нужно ребутить ДСЛ_ку, путём эмуляции нажатия кнопки на странице по адресу: http://10.1.1.1/resetrouter.html.

    Есть ли WEB компоненты, позволяющие это делать?
  • Медвежонок Пятачок © (05.10.10 14:48) [6]
    это как раз то, что тебе нужно.

    Есть ли WEB компоненты, позволяющие это делать?
    сам-то как думаешь?

    PS тебе не надо узнвать как нажать кнопку на веб странице. тебе нужно узнавать какой пост или гет запрос отправить своей коробке.
  • Плохиш © (05.10.10 16:21) [7]
  • Zheksonz (06.10.10 11:05) [8]
    Вот этот вариант мне подошёл, если кому нужно, держите:

    // 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;

  • Медвежонок Пятачок © (06.10.10 11:44) [9]
    и что в итоге?
    кликал по кнопке в браузере и не нравилось.
    теперь кликаешь по кнопке в project1.exe в том же веббраузере и нравится.
  • Zheksonz (06.10.10 11:58) [10]
    Медвежонок Пятачок ©   (06.10.10 11:44) [9]

    В моём примере, в отличии от браузера, всё программно делается. Автоматом грузится страница, автоматом нажимается кнопка для авторизации, и автоматом нажимается кнопка  Save/Reboot.

    Т.е. упал инет, нажимаю одну кнопочку и вуаля, ДСЛ_ка перегружена.
  • Медвежонок Пятачок © (06.10.10 12:02) [11]
    да понял я, не надо объяснять.
    это называется через задний проход.

    тебе же предлагалось:
    1. взять мозилу с плагином firebug и посмотреть там два запроса (авторизация и ресет)

    2. тебе не предлагалось ресетить роутер мозиллой.

    3. берешь idhttp или idtcpclient и выполняешь два запроса (подсмотренные в п.1)

    все. и никаких кнопок и веббраузеров
  • Zheksonz (06.10.10 12:46) [12]
    Медвежонок Пятачок ©   (06.10.10 12:02) [11]

    Дело говоришь! И хоть мне не привыкать пяткой ухо чесать, сделаю как положено.

    Спасибо!
  • Zheksonz (06.10.10 13:04) [13]
    Медвежонок Пятачок ©   (06.10.10 12:02) [11]

    Кстати, я пользуюсь Оперой, в которой есть опция инспектирования объектов. Т.е, как я понял, аналог феирбэга в мозиле.

    Дальше логика такова, что посмотрев какой код запускается по нажатию на кнопку, я должен, при помощи idhttp, кодить запуск этого кода применительно именно к этой страничке, с которой он запускается?
  • Медвежонок Пятачок © (06.10.10 13:14) [14]
    ну да.
    только предварительно надо таким же образом посмотреть формат и урл запроса на авторизацию и посмотреть какая кука при этом возвращается роутером.
    ее надо будет использовать в запросе на ресет, иначе коробка его не обработает как неавторизованный.
  • newman (07.10.10 00:37) [15]
    хмм, там вроде бы через телнет можно выполнить команду, в сети и примеры  скриптов есть
  • Zheksonz (11.10.10 10:35) [16]
    Всем спасибо. Телнетовские скрипты оказались как нельзя кстати.
  • Уа3 (20.10.10 02:23) [17]
    послать компоненту tab enter =)
 
Конференция "Сети" » Как программно сэмулировать нажатие на кнопку HTML страницы? [D7, WinXP]
Есть новые Нет новых   [134436   +26][b:0][p:0.001]