Что нового

Нет клика по кнопке

Anna

Новичок
Сообщения
119
Репутация
2
Здравствуйте.
Есть кнопка
Код:
;<input type="submit" value="     Старт     " style="font-weight: bold;">
Пытаюсь кликнуть так
Код:
$oInputs = _IETagnameGetCollection($oIE, "input")
For $oInput in $oInputs
    If String($oInput.Value) = "Старт" Then
        _IEAction($oInput, "click")
		Sleep(15000)
        ExitLoop
    EndIf
Next

Подскажите, пожалуйста, что неправильно.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
StringStripWS($oInput.Value, 8) = "Старт"
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
Garrett
Спасибо, но результат тот же, нет клика.
Переход по ссылке, взятой из массива, может в этом причина.
Код:
#include <IE.au3>
#include <Array.au3>

HotKeySet('{Esc}', '_Exit')

Dim $sMyString = "zdid"

Dim $aResult[1]
Dim $aSubmit[1]

$sURL =  "URL страницы"
$oIE = _IECreate($sURL)
$oLinks = _IELinkGetCollection($oIE)

For $i = 0 To 1
  For $oLink in $oLinks
    If StringInStr($oLink.href, $sMyString) Then
        $aResult[0] = UBound($aResult)
        _ArrayAdd($aResult, $oLink.href)
    EndIf
  Next
Next

;_ArrayDisplay($aResult) ; смотрим массив с найденными ссылками
$oIE = _IECreate($aResult[0])

For $i = 1 To UBound($aResult) - 1
    _IENavigate($oIE, $aResult[$i])
    ;в цикле переход по ссылкам из массива
    $oInputs = _IETagnameGetCollection($oIE, "input")
For $oInput in $oInputs
      If StringStripWS($oInput.Value, 8) = "Старт"  Then
        _IEAction($oInput, "click")
		Sleep(15000)
        ExitLoop
    EndIf
Next
	$sText = _IEBodyReadText($oIE)

    ;читаем текст страницы
    If $sText Then
        ;если прочитали.
        $hFile = FileOpen(@ScriptDir & '\' & $i & '_Test.txt', 2)
        ;открываем файл
        FileWrite($hFile, $aResult[$i] & @CRLF & @CRLF & $sText)
        ;записывем в него ссылку страницы и ее текст
        FileClose($hFile)
        ;закрываем файл

		Sleep(5000)
    EndIf
Next
;переход обратно на адрес
_IENavigate($oIE, $sUrl)
Func _Exit()
Exit
EndFunc
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
Есть ли другой способ кликнуть по кнопке “Старт”?
Селектор кнопки
table.tbl_stat:nth-child(4) > tbody:nth-child(1) > tr:nth-child(15) > td:nth-child(2) > form:nth-child(1) > input:nth-child(4)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Anna
Используйте @error и @extended для проверки.
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
Сделала так
Код:
For $i = 1 To UBound($aResult) - 1
    _IENavigate($oIE, $aResult[$i])
	;$oIE = _IECreate($aResult[$i])
   ;в цикле переходим по ссылкам из массива
    $oInputs = _IETagnameGetCollection($oIE, "input")
	If @error Then
    MsgBox(4096, "номер неверного параметра", @extended)
Else
    MsgBox(4096, "Результат", $oInputs)
EndIf
For $oInput in $oInputs
    
       If StringStripWS($oInput.Value, 8) = "Старт"  Then
	   _IEAction($oInput, "click")
		Sleep(15000)
        ExitLoop
    EndIf
Next

Выскакивает пустое окно MsgBox
Значит, в переменной $oInputs ничего нет, что делать?
 
A

Alofa

Гость
Anna сказал(а):
Выскакивает пустое окно MsgBox
Значит, в переменной $oInputs ничего нет
Я бы не торопился с выводами - MsgBox() не может отображать тип данных объект :D
Такие переменные нужно проверять через IsObj().
Код:
MsgBox(4096, 'IsObj()', IsObj($oInputs))
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
Alofa,Спасибо, в окне "IsObj()" единица 1,а таких кнопок две на странице.
Почему скрипт не кликнув, продолжает работу, ошибок не выдаёт?



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

в коде заменила “Старт” на “Найти”, без проблем кликнул кнопку вот эту
Код:
<input style="width: 100px;" value="Найти" type="submit">
почему - же не кликает эту кнопку
Код:
<input type="submit" value="     Старт     " style="font-weight: bold;">
:shok:
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
Может быть нужно не по “Старт” клик делать, а по тому что визуально не видно на странице. Перед строкой с текстом”Старт” есть вот такая строка
Код:
<form action="index.php" method="post" target="_blank"><input type="hidden" name="cf" value="uzd-geturltask"><input type="hidden" name="zdid" value="1287281"><input type="hidden" name="rnd" value="2794f6cbf8cb0f43e4bdda23667fe031">
<input type="submit" value="     Старт     " style="font-weight: bold;">
</form>
Подскажите, пожалуйста, как по ней кликнуть.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Находите кнопку с типом submit содержащие в value Старт и вызываете метод .click()
Таких тем - миллион на сайте.
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
inververs
Не получается
Код:
$oInput = _IETagnameGetCollection($oIE, "input")
 If $oInput.type = 'submit' And $oInput.value = 'Старт' Then
	_IEAction($oInput, "click")
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Anna
Ваш input вообще находится?
Код:
$oInputs = _IETagnameGetCollection($oIE, "input")

For $oInput In $oInputs
	
	If $oInput.type == "submit" Then _
		ConsoleWrite(StringFormat("> %s\n", $oInput.value))
Next
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
Запускаю компилированный, на сервере Windows Server 2008 R2 браузер IE9
Как посмотреть input находится или нет.
Где, что должно быть записано?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Anna [?]
Как посмотреть input находится или нет.
Где, что должно быть записано?

1. Запустите SciTE
2. Создайте новый документ (Ctrl+N)
3. Код указанный ниже, скопируйте себе в только что созданный документ.
4. Сохраните созданный документ.
5. Нажмите на клавишу F5
6. В процессе выполнение скрипта (в консоли SciTE) должны появиться все значения найденных input`ов тип которых submit.

Код:
#include <IE.au3>

$sURL = "http://mysources"

$oIE = _IECreate($sURL)
$oInputs = _IETagnameGetCollection($oIE, "input")

For $oInput In $oInputs
    
    If $oInput.type == "submit" Then _
        ConsoleWrite(StringFormat("> %s\n", $oInput.value))
Next


P.S. httр://mysources заменить на реальный адрес.
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
На сервере неустановлен Autoit и соответственно редактора SciTE нет
Поэтому и спрашиваю, как ещё можно перехватить.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Anna, отладить на персональной машине не судьба?

Anna [?]
Запускаю компилированный, на сервере

Компилируйте, проверяйте.
Код:
#include <Array.au3>
#include <IE.au3>

Local $aLinks[100], $i = 0
$sURL = "https://www.google.ru"

$oIE = _IECreate($sURL)
$oInputs = _IETagnameGetCollection($oIE, "input")

For $oInput In $oInputs

	If $oInput.type == "submit" Then
		$aLinks[$i] = $oInput.value
		; ConsoleWrite(StringFormat("> %s\n", $oInput.value))
		$i += 1
	EndIf
Next

ReDim $aLinks[$i]
_ArrayDisplay($aLinks)
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
Garrett, Спасибо, находит[0] Старт
[1] Стоп


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

Что из этого следует?
Куда дальше “копать”?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Anna [?]
Что из этого следует?
Код:
#include <Array.au3>
#include <IE.au3>

$sURL = "https://mysource"

$oIE = _IECreate($sURL)
$oInputs = _IETagnameGetCollection($oIE, "input")

For $oInput In $oInputs

	If $oInput.type == "submit" And StringStripWS($oInput.value, 8) == "Старт" Then
		_IEAction($oInput, "click")
		ExitLoop
	EndIf
Next


Если не кликнет, посмотрите пример для:
Код:
_IEFormSubmit
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
Безнадёга (

В примере нужно по имени объекта, а у меня его нет.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Anna [?]
В примере нужно по имени объекта, а у меня его нет.
Есть индекс формы.
Код:
$oIE = _IECreate("http://www.google.com")
$oForm = _IEFormGetCollection($oIE, 0)
_IEFormSubmit($oForm)
 
Верх