Что нового

Поочерёдные клики по элементам div

TpeTTep

Новичок
Сообщения
45
Репутация
1
Доброго времени суток. Появилась необходимость поработать с IE. Со всем вроде бы разобрался, но есть одно но. В общем страница выдает 20 div'ов с одинаковым classname. Все эти div'ы нужно поочерёдно прокликать. Первый клик проходит, остальные нет. Помогите разобраться)
Код:
$oDives = _IETagNameGetCollection($oIE, "div")
For $oDiv in $oDives
   If $oDiv.classname = "section-result" Then
      $oDiv.Click()
      Sleep(3000)
      ;тут нужные мне действия, а ниже идет возврат назад к списку div'ов
      $oButtons = _IETagNameGetCollection($oIE, "button")
      For $oButton in $oButtons
         If $oButton.classname = "section-back-to-list-button blue-link noprint" Then
            $oButton.Click()
            ExitLoop
         Endif
      Next
      Sleep(1000)
   EndIf
Next
 

gunter123

Продвинутый
Сообщения
159
Репутация
69
Возможно после клика по div`у страница обновляется и эта коллекция уже не содержит div`ов, поэтому ее надо обновлять

Код:
$iLength = $oIE.document.querySelectorAll('div.section-result').length            ; Получаем количество div`ов
ConsoleWrite('Найдено ' & $iLength & ' div`ов' & @CRLF)

For $iNumber = 0 To $iLength - 1
   $oDiv = $oIE.document.querySelectorAll('div.section-result')[$iNumber]      ; Ищем div под нужным номером
   If Not IsObj($oDiv) Then Exit MsgBox(4096, 'Ошибка', 'Не найден div #' & $iNumber)
   $oDiv.Click()
   Sleep(3000)

   $oButton = $oIE.document.querySelector("button.section-back-to-list-button.blue-link.noprint")
   If Not IsObj($oButton) Then Exit MsgBox(4096, '', 'Не найдена кнопка')
   $oButton.Click()
   Sleep(1000)
Next
 

gunter123

Продвинутый
Сообщения
159
Репутация
69
А эти div`ы в процессе работы скрипта пропадают со страницы?
 

gunter123

Продвинутый
Сообщения
159
Репутация
69
Тогда вот так можно. Будет постоянно кликать на первый найденный div

Код:
$iLength = $oIE.document.querySelectorAll('div.section-result').length            ; Получаем количество div`ов
ConsoleWrite('Найдено ' & $iLength & ' div`ов' & @CRLF)

For $iNumber = 0 To $iLength - 1
   $oDiv = $oIE.document.querySelector('div.section-result')
   If Not IsObj($oDiv) Then Exit MsgBox(4096, 'Ошибка', 'Не найден div #' & $iNumber)
   $oDiv.Click()
   Sleep(3000)

   $oButton = $oIE.document.querySelector("button.section-back-to-list-button.blue-link.noprint")
   If Not IsObj($oButton) Then Exit MsgBox(4096, '', 'Не найдена кнопка')
   $oButton.Click()
   Sleep(1000)
Next
 
Автор
T

TpeTTep

Новичок
Сообщения
45
Репутация
1
Будет постоянно кликать на первый найденный div
В том то и дело, что он должен открывать их последовательно. М.б есть способ изменить название класса для div'a? Хотя не, это не сработает. После возврата к списку div'ов имена восстановятся
 

gunter123

Продвинутый
Сообщения
159
Репутация
69
мб так заработает

Код:
$iLength = $oIE.document.querySelectorAll('div.section-result').length        ; Получаем количество div`ов
ConsoleWrite('Найдено ' & $iLength & ' div`ов' & @CRLF)

Global $oDivs, $oButton

For $iNumber = 0 To $iLength - 1
   ConsoleWrite('Ждем появления div`ов на странице' & @CRLF)
   Do
      $oDivs = $oIE.document.querySelectorAll('div.section-result')
      Sleep(500)
   Until IsObj($oDivs) And $oDivs.length == $iLength
   $oDivs[$iNumber].Click()
   Sleep(1000)

   ConsoleWrite('Ждем появления кнопки на странице' & @CRLF)
   Do
      $oButton = $oIE.document.querySelector("button.section-back-to-list-button.blue-link.noprint")
      Sleep(500)
   Until IsObj($oButton)
   $oButton.Click()
   Sleep(1000)
Next
 
Автор
T

TpeTTep

Новичок
Сообщения
45
Репутация
1
Что в консоли пишет?
Код:
"C:\Users\User\Desktop\AutoIt v3 Script.au3" (31) : ==> Subscript used on non-accessible variable.:
$oDivs[$iNumber].Click()
$oDivs^ ERROR

Он ругается на то, что мол это не массив, ну мне так кажется. Интересно то, что он даже первого клика не делает.
 

gunter123

Продвинутый
Сообщения
159
Репутация
69
Даже не знаю.. Скинь ссылку на сайт, если можешь
 

ildar67

Новичок
Сообщения
10
Репутация
1
Код:
$iLength = $oIE.document.querySelectorAll('div.section-result').length            ; Получаем количество div`ов
ConsoleWrite('Найдено ' & $iLength & ' div`ов' & @CRLF)

For $iNumber = 0 To $iLength - 1
   $oDiv = $oIE.document.querySelectorAll('div.section-result')[$iNumber]      ; Ищем div под нужным номером
   If Not IsObj($oDiv) Then Exit MsgBox(4096, 'Ошибка', 'Не найден div #' & $iNumber)
   $oDiv.Click()
   Sleep(3000)

   $oButton = $oIE.document.querySelector("button.section-back-to-list-button.blue-link.noprint")
   If Not IsObj($oButton) Then Exit MsgBox(4096, '', 'Не найдена кнопка')
   $oButton.Click()
   Sleep(1000)
Next


Обернул такой код в цикл. Подскажите как сделать чтобы divы по которым кликнули запоминались и клик по ним больше не делался. Divы отличаются таким кодом, у каждого разный номер
<span class="table__event-number">725</span>
Сообщение автоматически объединено:

или как удалить div по которому кликнули? Так не получается
Код:
For $iNumber = 0 To $iLength - 1
   $oDiv = $oIE.document.querySelectorAll('div.section-result')[$iNumber]      ; Ищем div под нужным номером
   If Not IsObj($oDiv) Then Exit MsgBox(4096, 'Ошибка', 'Не найден div #' & $iNumber)
   $oDiv.Click()
   $oDiv.remove()
   Sleep(3000)
 
Последнее редактирование:

gunter123

Продвинутый
Сообщения
159
Репутация
69
как удалить div по которому кликнули?

Как-то так
Код:
$iLength = $oIE.document.querySelectorAll('div.section-result').length            ; Получаем количество div`ов
ConsoleWrite('Найдено ' & $iLength & ' div`ов' & @CRLF)

For $iNumber = 1 To $iLength
   $oDiv = $oIE.document.querySelector('div.section-result')
   If Not IsObj($oDiv) Then Exit MsgBox(4096, 'Ошибка', 'Не найден div #' & $iNumber)
   $oDiv.Click()
   Sleep(3000)

   $oButton = $oIE.document.querySelector("button.section-back-to-list-button.blue-link.noprint")
   If Not IsObj($oButton) Then Exit MsgBox(4096, '', 'Не найдена кнопка')
   $oButton.Click()
   Sleep(1000)
   
   $oIE.document.querySelector('div.section-result').Remove()
Next
 
Верх