Что нового

Клик по динамической кнопке на сайте

den4ik

Новичок
Сообщения
21
Репутация
0
Друзья, помогите c решением такой задачки

есть сайт http://example.com/index.cgi
при авторизации на сайте ссылка на нужную мне кнопку выглядит вот так: http://example.com/index.cgi?index=18&sid=MX3KEjryjYBefEWi
Значение sid динамически меняется при каждой авторизации на сайте, отсюда следует:
1. нужно прочитать и сохранить значение sid после авторизации
2. создать актуальную ссылку на кнопку
3. щелкнуть по ней

начало выглядит вот так
Код:
#include <IE.au3>
$sLogin = ''
$sPass = ''
$sUrl = 'http://example.com/index.cgi'

$oIE = _IECreate($sUrl)
$oLogin = _IEGetObjByName($oIE, 'user')
$oPass = _IEGetObjByName($oIE, 'passwd')
$oButton = _IEGetObjByName($oIE, 'logined')

_IEFormElementSetValue($oLogin, $sLogin)
_IEFormElementSetValue($oPass, $sPass)
_IEAction($oButton, 'click')
_IELoadWait($oIE)
Sleep(2000)



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

пока решил задачку так:
Код:
$sMyString = "Название кнопки"
$oLinks = _IELinkGetCollection($oIE)
For $oLink in $oLinks
    $sLinkText = _IEPropertyGet($oLink, "innerText")
    If StringInStr($sLinkText, $sMyString) Then
        _IEAction($oLink, "click")
        ExitLoop
    EndIf
 Next

Но все же очень хотелось бы "вытащить" ссылку на эту кнопку :(
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
den4ik сказал(а):
Но все же очень хотелось бы "вытащить" ссылку на эту кнопку :(
Я бы сделал так:
Код:
For $oLink in $oLinks
    $sLinkText = $oLink.innerText
    $sLinkUrl = $oLink.href
    If StringInStr($sLinkText, $sMyString) Then
        _IEAction($oLink, "click")
        ExitLoop
    EndIf
Next
 
Автор
D

den4ik

Новичок
Сообщения
21
Репутация
0
UP
жизненно :smile: необходимо выловить значение sid из ссылки..подскажите хотя бы в какую сторону копать
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
den4ik [?]
жизненно
smiley.gif
необходимо выловить значение sid
А где он обитает?
httр://example.com/index.cgi показывает следующие:
 

Вложения

  • 16677.PNG
    16677.PNG
    10.1 КБ · Просмотры: 10
Автор
D

den4ik

Новичок
Сообщения
21
Репутация
0
Garrett сказал(а):
den4ik [?]
жизненно
smiley.gif
необходимо выловить значение sid
А где он обитает?
httр://example.com/index.cgi показывает следующие:

ссылка - это для примера, сам сайт внутри локальной сети находится

если будет полезно, то нужный мне кусок кода страницы выглядит так:
Код:
<TABLE border='0' width='100%' style='margin: 0'>
<TR><TD width='200' valign='top' bgcolor='#eeeeee' class=MENU_BACK >
 <div class='menu_top'></div>
 <div class='menu_main'>
 <table border='0' width='100%' cellspacing='2'>
<tr class='odd'><td class=menu_cel_main><a href="http://example.com/index.cgi?index=10&amp;sid=pzbwa5UuwhQdD5uv">Тут кнопка</a></td></tr>
<tr class='odd'><td class=menu_cel_main><a href="http://example.com/index.cgi?index=17&amp;sid=pzbwa5UuwhQdD5uv">И тут кнопка</a></td></tr>
<tr class='odd'><td class=menu_cel_main><a href="http://example.com/index.cgi?index=18&amp;sid=pzbwa5UuwhQdD5uv">Вот эта кнопка мне нужна!</a></td></tr>
<tr class='odd'><td class=menu_cel_main><a href="http://example.com/index.cgi?index=1000&amp;sid=pzbwa5UuwhQdD5uv">Выход</a></td></tr>
</table>
</div>
 <div class='menu_bot'></div>
</TD><TD align='center'>
<div class='table_top'></div>
<div class='table_cont'>

<TABLE width='600' cellspacing='0' cellpadding='0' border='0'><TR><TD bgcolor='#E1E1E1'>
<TABLE width='100%' cellspacing='1' cellpadding='0' border='0'>
<TR bgcolor='#eeeeee'><TD><b>Логин:</b></TD><TD><b>1570</b> <i>(UID: 919)</i></TD></TR>
<TR bgcolor='#FFFFFF'><TD><b>Депозит:</b></TD><TD>0.26    <a class='link_button' href="http://example.com/index.cgi?index=22&amp;SUM=0&amp;sid=pzbwa5UuwhQdD5uv">Выписать счёт</a>   </TD></TR>
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
den4ik,
Код:
#include <IE.au3>

$sUrl = @ScriptDir & '\1.html';url
_IEErrorHandlerRegister()
$oIE = _IECreate($sUrl)

$oDivs = _IETagNameGetCollection($oIE, 'div')
For $oDiv In $oDivs
	If $oDiv.ClassName == 'menu_main' Then
		$oLinks = _IETagNameGetCollection($oDiv, 'a')
		For $oLink In $oLinks
			$sHref = $oLink.Href
			ConsoleWrite($sHref & @TAB & $oLink.InnerText & @TAB & StringRegExpReplace($sHref, '^.*&', '') & @TAB & _
					StringRegExpReplace($sHref, '^.*sid=', '') & @LF)
		Next
	Else
	EndIf
Next
1.html:
Код:
<HTML>
  <HEAD>
    <TITLE>Test</TITLE>
  </HEAD>
  <BODY>
    <TABLE border="0"  width="100%"  style="margin: 0" >
      <TBODY>
        <TR>
          <TD width="200"  valign="top"  bgcolor="#eeeeee"  class="MENU_BACK" >
            <DIV class="menu_top" ></DIV>
            <DIV class="menu_main" >
              <TABLE border="0"  width="100%"  cellspacing="2" >
                <TBODY>
                  <TR class="odd" >
                    <TD class="menu_cel_main" >
                      <A href="http://example.com/index.cgi?index=10&sid=pzbwa5UuwhQdD5uv" >Тут кнопка</A>
                    </TD>
                  </TR>
                  <TR class="odd" >
                    <TD class="menu_cel_main" >
                      <A href="http://example.com/index.cgi?index=17&sid=pzbwa5UuwhQdD5uv" >И тут кнопка</A>
                    </TD>
                  </TR>
                  <TR class="odd" >
                    <TD class="menu_cel_main" >
                      <A href="http://example.com/index.cgi?index=18&sid=pzbwa5UuwhQdD5uv" >Вот эта кнопка мне нужна!</A>
                    </TD>
                  </TR>
                  <TR class="odd" >
                    <TD class="menu_cel_main" >
                      <A href="http://example.com/index.cgi?index=1000&sid=pzbwa5UuwhQdD5uv" >Выход</A>
                    </TD>
                  </TR>
                </TBODY>
              </TABLE>
            </DIV>
          </TD>
        </TR>
      </TBODY>
    </TABLE>
  </BODY>
</HTML>
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
5.au3
Код:
#include <IE.au3>
$oIE = _IECreate(@ScriptDir & "\5.html")
_IELoadWait($oIE)
$sSid = ''
$oLinks = _IETagNameGetCollection($oIE, "a")
If IsObj($oLinks) Then
	For $oLink In $oLinks
		$sLinkUrl = $oLink.href
		$sLinkHtml = $oLink.innerHTML
		If StringInStr($sLinkHtml, "Вот эта кнопка мне нужна!") Then
			$tmp = StringRegExp($sLinkUrl, '.*?sid=([^&]*)', 3)
			If IsArray($tmp) Then
				$sSid = $tmp[0]
			Else
				$sSid = ''
			EndIf
			ConsoleWrite(StringFormat("+----------+\r\nFound link:\r\nURL: %s\r\nHTML: %s\r\nlink sid: %s\r\n+----------+\r\n", $sLinkUrl, $sLinkHtml, $sSid))
			; _IENavigate($oIE, $sLinkUrl)
			; _IEAction($oLink, "click")
			ExitLoop
		EndIf
	Next
EndIf

5.html
Код:
<!DOCTYPE HTML>
<html>
 <head>
  <meta charset="utf-8">
  <title>tst5 find example link in table</title>
 </head>
 <body>  
<TABLE border='0' width='100%' style='margin: 0'>
<TR><TD width='200' valign='top' bgcolor='#eeeeee' class=MENU_BACK >
 <div class='menu_top'></div>
 <div class='menu_main'>
 <table border='0' width='100%' cellspacing='2'>
<tr class='odd'><td class=menu_cel_main><a href="http://example.com/index.cgi?index=10&amp;sid=pzbwa5UuwhQdD5uv">Тут кнопка</a></td></tr>
<tr class='odd'><td class=menu_cel_main><a href="http://example.com/index.cgi?index=17&amp;sid=pzbwa5UuwhQdD5uv">И тут кнопка</a></td></tr>
<tr class='odd'><td class=menu_cel_main><a href="http://example.com/index.cgi?index=18&amp;sid=pzbwa5UuwhQdD5uv">Вот эта кнопка мне нужна!</a></td></tr>
<tr class='odd'><td class=menu_cel_main><a href="http://example.com/index.cgi?index=1000&amp;sid=pzbwa5UuwhQdD5uv">Выход</a></td></tr>
</table>
</div>
 <div class='menu_bot'></div>
</TD><TD align='center'>
<div class='table_top'></div>
<div class='table_cont'>

<TABLE width='600' cellspacing='0' cellpadding='0' border='0'><TR><TD bgcolor='#E1E1E1'>
<TABLE width='100%' cellspacing='1' cellpadding='0' border='0'>
<TR bgcolor='#eeeeee'><TD><b>Логин:</b></TD><TD><b>1570</b> <i>(UID: 919)</i></TD></TR>
<TR bgcolor='#FFFFFF'><TD><b>Депозит:</b></TD><TD>0.26    <a class='link_button' href="http://example.com/index.cgi?index=22&amp;SUM=0&amp;sid=pzbwa5UuwhQdD5uv">Выписать счёт</a>   </TD></TR>

</div>
 </body>
</html>
 
Верх