Что нового

Нажать кнопку в таблице на сайте

Discrim

Новичок
Сообщения
2
Репутация
0
Доброго времени суток.

Уже 4 часа бьюсь над проблемой нажатия кнопки, перечитал всю справку, облазил весь форум - никакого результата. Решил обратиться за помощью к вам.

Есть сайт, на нем 10 строк с таким кодом:
Код:
<tr data-id="*1" class="mgmtres mgmtdemand pointer" onclick="return lol.Mgmt.showResourceInfo(this,event)">
<td class="icon">
<img class="round" src="/img/res/fish.png">
</td><td class="name">Fish</td>
<td class="count">26</td>
<td class="quant">26&thinsp;kg</td>
<td class="value gold monospace">24.44</td>
<td class="submit">
      <button class="submit green" onclick="return lol.Mgmt.purchase(this,event)">Buy</button></td>
</tr>
Где *1 порядок строки в таблице, name - название строки, справа кнопка "Купить"

Я захожу на сайт, проверяю по своим фильтрам Fish это или нет, после чего должен нажать на кнопку купить.
Код:
_IENavigate($oIE, $sUrlDemands1)
_IELoadWait($oIE)

(фильтр опускаю, его пока не реализовал)
Далее я пытаюсь нажать на кнопку.
Пробовал все. И поиск по ID :
Код:
$oForm=_IEGetObjById($oIE, '*1')

И по имени :
Код:
$oForm=_IEGetObjByName($oIE, 'mgmtres mgmtdemand pointer')

Или так :
Код:
$oForm=_IEGetObjByName($oIE, 'Name')


Затем пытался вытащить name из формы (Fish) и сравнить с заданной строкой, но даже найти нужную форму не получалось, не говоря и нажатии этой кнопки, которую тоже всеми способами пытался нажать. При компиляции всегда выскакивает подобное

--> IE.au3 T3.0-2 Warning from function _IEGetObjByName, $_IESTATUS_NoMatch (Name: Fish, Index: 0)
или
--> IE.au3 T3.0-2 Warning from function _IEGetObjById, $_IESTATUS_NoMatch (*1)

Прошу вашей помощи.
Как мне вытащить имя "Fish" из кода, а затем нажать кнопку?
Заранее спасибо.
 
Автор
D

Discrim

Новичок
Сообщения
2
Репутация
0
Спасибо, InnI.
Кнопка нажимается.
А можно как-то перед ее нажатием вытащить name? Там их 10 штук и покупать все не надо. Хочу идти по порядку и сравнивать с черным списком, если покупать можно, то купить, если нельзя, то идти дальше.

Пробую так :
Код:
$oButtons = _IETagNameGetCollection($oIE, "button")
$oNames=_IETableGetCollection($oIE,'class="name"'); Или name, или class='name', или td/td
For $oName In $oNames
	If $oName.ClassName = "name" Then
		For $oButton In $oButtons
			If $oButton.ClassName = "submit green" Then
				_IEAction($oButton, "click")
				ExitLoop
			EndIf
		Next
		ExitLoop
	EndIf
Next

Что не так?
Может создать что-то вроде указателя на строку в таблице, затем внутри нее сравнивать имя, а потом внутри нее нажимать кнопку?
Я правильно понял, что в вашем коде сразу указатель на кнопку указывает, т.е на верх по иерархии никак не выйти, чтобы имя соседнего элемента узнать?



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

Попробовал иначе, все равно не работает.
Логика такая.
Я беру все строки таблицы по имени класса class="mgmtres mgmtdemand pointer"
Затем по каждой из них иду в цикле For и просто пытаюсь найти в строке таблицы элемент с названием класса class='name'. Если я нахожу его, я кликаю по кнопке. Я даже не пытаюсь вытащить значение в этом элементе. Просто пытаюсь его найти. Если нахожу, кликаю по кнопке.

Код:
$oStrings = _IETagNameGetCollection($oIE, "tr")
For $oString In $oStrings
  If $oString.ClassName = "mgmtres mgmtdemand pointer" Then
	$oNames = _IETagNameGetCollection($oString, "class")
	For $oName In $oNames
		If $oName.ClassName = "name" Then
			$oButtons = _IETagNameGetCollection($oString, "button")
			For $oButton In $oButtons
				If $oButton.ClassName = "submit green" Then
					_IEAction($oButton, "click")
					ExitLoop
				EndIf
			Next
			ExitLoop
		EndIf
	Next
    ExitLoop
  EndIf
Next

Основная идея затем вытащить из class='name' значение >Fish<, но даже просто имя не находит. Дебаг месседж строки $oNames = _IETagNameGetCollection($oString, "class") дает 0.

Что делать? Как мне не сразу кликнуть по кнопке, а узнать перед этим текст в строке таблицы?


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

Добавил фильтр. Если фильтра нет, то все работает. Если фильтр включен(строчка If String($oName.value) = "Beer" Then), то выдает ошибку
If String($oName.value) = "Beer" Then
If String($oName^ ERROR
Код:
$oStrings = _IETagNameGetCollection($oIE, "tr")
For $oString In $oStrings
  If $oString.ClassName = "mgmtres mgmtdemand pointer" Then
    $oNames = _IETagNameGetCollection($oString, "td")
    For $oName In $oNames
        If $oName.ClassName = "name" Then
			If String($oName.value) = "Beer" Then
				$oButtons = _IETagNameGetCollection($oString, "button")
				For $oButton In $oButtons
					If $oButton.ClassName = "submit green" Then
						_IEAction($oButton, "click")
						ExitLoop
					EndIf

				Next
				ExitLoop
			EndIf
            ExitLoop
		EndIf
    Next
    ExitLoop
  EndIf
Next



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

Поменял на innertext и заработало, но правда только если Beer стоит в первой строчке таблицы. Вторую не ищет.
Правильно ли я понимаю, что мой код идет по всем строкам
Код:
$oStrings = _IETagNameGetCollection($oIE, "tr")
For $oString In $oStrings

Строка задается тегом /tr, я ищу все эти строки и по очереди проверяю каждую, верно?
Я пробовал менять на _IETagNameAllGetCollection, но тогда вообще ничего не находит.

Код:
$oStrings = _IETagNameGetCollection($oIE, "tr")
For $oString In $oStrings
  If $oString.ClassName = "mgmtres mgmtdemand pointer" Then
    $oNames = _IETagNameGetCollection($oString, "td")
    For $oName In $oNames
        If $oName.ClassName = "name" Then
			If String($oName.innerText) = "Beer" Then
				$oButtons = _IETagNameGetCollection($oString, "button")
				For $oButton In $oButtons
					If $oButton.ClassName = "submit green" Then
						_IEAction($oButton, "click")
						ExitLoop
					EndIf

				Next
				ExitLoop
			EndIf
            ExitLoop
		EndIf
    Next
    ExitLoop
  EndIf
Next

Как мне найти во второй строке Fish и кликнуть по соответствующей кнопке?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
$oStrings = _IETagNameGetCollection($oIE, "tr")
For $oString In $oStrings
  $oNames = _IETagNameGetCollection($oString, "td")
  For $oName In $oNames
    If $oName.ClassName = "name" And $oName.innerText = "Fish" Then
      $oButton = _IETagNameGetCollection($oString, "button", 0)
      _IEAction($oButton, "click")
      ExitLoop 2
    EndIf
  Next
Next
 
Верх