Что нового

[Автоматизация] Обратиться к объекту внутри frameset`а

tigran_astranet

Новичок
Сообщения
3
Репутация
0
Добрый день!

Начал недавно изучать Autoit и уже получилось открыть сайт - авторизоваться - открыть нужное меню - написать команду - и запустить ее.

Но затем столкнулся с проблемой после отработки команды, я получаю таблицу с полями, но таблица разбита на страницы, так как каждая страница не вмещает больше 100 записей.

Скриншот страницы я приложил к теме.

Я нашел, как это исправить, но для этого мне нужно изменить значение объекта в frameset. Вот html код:
Код:
<html>

<frameset rows="0,0,0,100%,0" frameborder="0" border="0" framespacing="0" onunload="onUnload()" prev_rows="0,0,28,*,21" resized="true" prev_border="0" prev_frameborder="0" prev_framespacing="0">

<frame name="timeoutcontrol" id="MainEx_timeoutcontrol_0" src="/da/wdk/timeoutcontrol.jsp?Reload=1348814301756&amp;__dmfFrameId=MainEx_timeoutcontrol_0&amp;__dmfClientId=1348814108703" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" noresize="false" resized="true" prev_noresize="" prev_marginheight="0" prev_marginwidth="0" prev_scrolling="no">

<frame name="residentucfinvoker" id="MainEx_residentucfinvoker_0" src="/da/component/residentucfinvoker?Reload=1348814301756&amp;__dmfFrameId=MainEx_residentucfinvoker_0&amp;__dmfClientId=1348814108703" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" noresize="false" resized="true" prev_noresize="" prev_marginheight="0" prev_marginwidth="0" prev_scrolling="no">

<frame name="titlebar" id="MainEx_titlebar_0" src="/da/component/titlebar?Reload=1348814301756&amp;__dmfFrameId=MainEx_titlebar_0&amp;__dmfClientId=1348814108703" title="yyMSG_TITLEBARyy" frameborder="0" scrolling="no" noresize="false" resized="true" prev_noresize="" prev_marginheight="null" prev_marginwidth="null" prev_scrolling="no" marginheight="0" marginwidth="0">

<frame name="view" id="MainEx_view_0" src="/da/webtop/classic/classic.jsp?Reload=1348814301756&amp;__dmfFrameId=MainEx_view_0&amp;__dmfClientId=1348814108703" title="yyMSG_CLASSICVIEWyy" frameborder="0" scrolling="no" noresize="false" resized="true" prev_noresize="" prev_marginheight="null" prev_marginwidth="null" prev_scrolling="no" marginheight="0" marginwidth="0">

<frame name="messagebar" id="MainEx_messagebar_0" src="/da/component/messagebar?Reload=1348814301757&amp;__dmfFrameId=MainEx_messagebar_0&amp;__dmfClientId=1348814108703" title="yyMSG_MESSAGEBARyy" frameborder="0" scrolling="no" noresize="false" resized="true" prev_noresize="" prev_marginheight="null" prev_marginwidth="null" prev_scrolling="no" marginheight="0" marginwidth="0">

</frameset>

</html>

Проблема в том, что структура frame "view" имеет большую вложенность, вкратце вот такую:
Код:
<html> 
<frameset>
 <frameset>
   <frame>
     <html>
      <frameset>
        <frame>
          <html>
           <body>
             <form>
               <div>
                 <div>
                   <div>
                     <div>
                       <div>
                         <table>
                           <table>
                            <select name = "dql_0_sizer_0">
                               <option name = "dql_0_sizers_0_100" value = "100"> 100 </option>
                             </select>
                           </table>
                         </table>
                       </div>
                     </div>
                   </div>
                 </div>
               </div>
             </form>
           </body>
          </html>
        </frame>
      </frameset>
     </html>
   </frame>
 </frameset>
</frameset>
</html>
И мне нужно изменить значение объекта dql_0_sizers_0_100 со 100 на 1000, то есть value = "1000".

Вот мой код:
Код:
<IE.au3>
#Include <GUIMenu.au3>
#Include <WinAPI.au3>
#Include <WindowsConstants.au3>

$oIE     = _IECreate("http://10.124.8.103:7777/da/component/main?__dmfClientId=1348742122796&__dmfTzoff=-240",0,1,1)
$HWND = _IEPropertyGet($oIE, "hwnd")
WinSetState($HWND, "", @SW_MAXIMIZE)
_IEAction($oIE, "visible")
_IELoadWait($oIE)

Local $oInputs = _IETagNameGetCollection($oIE, "input")
For $oInput In $oInputs
    MsgBox(0, "Form Input Type", "Form: " & $oInput.form.name & " Type: " & $oInput.type, 5)
Next

$oForm   = _IEFormGetCollection($oIE,0)
$oLogin  = _IEFormElementGetObjByName($oForm,"Login_username_0")
$oPass   = _IEFormElementGetObjByName($oForm,"Login_password_0")
_IEFormElementSetValue($oLogin,"Login")
_IEFormElementSetValue($oPass,"Password")

$oButton = _IEGetObjByName($oIE, 'Login_loginButton_0')
_IEAction($oButton, 'click')

Sleep(7000)

MouseClick("left", 808, 250, 2)

;WinSetState($HWND, "", @SW_ENABLE)

Send ("+{Q}")

Sleep(3000)

;MouseClick("left", 281, 231, 2)

;Sleep(3000)

;Send ("Select * from dm_document")

;Send ("{TAB}")
;Sleep(1000)
;Send ("{ENTER}")

;_IELoadWait($oIE)
;Sleep(2000)

;$o_frame = _IEFrameGetCollection($oIE, 1)
;$o_form = _IEFormGetObjByName($o_frame, "loginentry")

;$o_login = _IEFormElementGetObjByName($o_form, "USERID")
;$o_password = _IEFormElementGetObjByName($o_form, "PASSW")


$oFrames = _IEFrameGetCollection($oIE)
$oNestedFrame = _IEFormGetObjByName($oFrames, "view")
$oFrames = _IEFrameGetCollection($oNestedFrame)
$oFrames = _IEFrameGetCollection($oFrames)

Local $iNumFrames = @extended
For $i = 0 To 2
    Local $oFrame = _IEFrameGetCollection($oFrames, $i)
    MsgBox(0, "Frame Info", _IEPropertyGet($oFrame, "locationurl"))
Next


Очень надеюсь на Вашу помощь!
 

ArtInt

Знающий
Сообщения
135
Репутация
18
tigran_astranet
html код закрывают в теги [ code ] [/ code ], вот так:
Код:
<p>Hey, look at this:<img src="1.jpg" alt="image"></p>

А AutoIt код в теги [ autoit ][/ autoit ], вот так:

Код:
msgbox (64,"Title#1","Test!")


Это описано в правилах, кстати, модеры увидят, будут ругаться.
 

madmasles

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


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

ArtInt

Знающий
Сообщения
135
Репутация
18
OffTopic:
Накаркал модераторов))

А в коде первая строчка, я могу ошибаться, но вроде бы... #include <IE.au3>, не?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
tigran_astranet,
Попробуйте получить ссылку на нужный Вам фрейм
Код:
_IEGetObjById()
_IEGetObjByName()
Потом
Код:
_IENavigate($oIE, $oFrame.src)
А здесь уже менять нужное Вам значение.
 
Автор
T

tigran_astranet

Новичок
Сообщения
3
Репутация
0
Спасибо за помощь, но к сожалению получить src фрейма не удалось. Вопрос решился по другому с использованием прямой ссылки на нужный мне ресурс, в котором использован html без фреймов.
 

ArtInt

Знающий
Сообщения
135
Репутация
18
tigran_astranet
выложи получившийся код, плз
 
Верх