Что нового

Как войти в аккаунт если _IELinkClickByText не хочет работать в IE11

Evochka Turkova

Новичок
Сообщения
39
Репутация
0
Доброго времени суток. Установила Win8 и как оказалось _IELinkClickByText не хочет работает в IE11 и вылетает с ошибкой. Раньше мне хватало:

Код:
_IELinkClickByText($oIE,"Войти")


Но теперь это не получается. :( а вот и сам кусок кода:

Код:
<div id="login_btn_signin">
<a class="btn_checkout_green" href="javascript:DoLogin()">
<div class="leftcap"></div><div class="rightcap"></div>
<div class="text">Войти</div>
</a>
</div>

Перепробывала примеры с форума, но не могу разобраться как кликать по id, т.к не нашла примеров, где указывается <div id= или похожее :-[
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Попробуй так:
Код:
$oDiv = _IEGetObjById($oIE, "login_btn_signin")
$oLink = _IETagNameGetCollection($oDiv, "a", 0)
_IEAction($oLink, "click")
Sleep(100)
_IELoadWait($oIE)

P.S. Если не поможет, напишу чтобы скрипт ждал ссылку в цикле в течении 5 сек... :smile:


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

Мне вообще эта функция не нравится, так как она подходит не ко всему :smile:
Я вот написал функцию, она в 100 раз лучше этой и кстати может быть добавлена в IE.au3 :smile: :smile: :smile:
Код:
; #FUNCTION# ====================================================================================================================
; Author ........: alex33
; ===============================================================================================================================
Func _IELinkClickByStr(ByRef $oObject, $sStr, $iWait = 1)
If Not IsObj($oObject) Then Return SetError(1, 0, 0)
$aLinks = _IETagNameGetCollection($oObject, "a")
For $oLink In $aLinks
If StringInStr($oLink.innerHTML, $sStr) Then
  _IEAction($oLink, "click")
ExitLoop
EndIf
Next
If $iWait Then _IELoadWait($oObject)
Return 1
EndFunc   ;==>_IELinkClickByStr
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
alex33 [?]
Я вот написал функцию, она в 100 раз лучше этой
Очень сомневаюсь в этом, т.к.
1. У Вас не объявлены локальные переменные.
2. У Вас нет проверок на ошибки.
3. Если внутри тегов "а" есть и другие теги (например <FONT size=4 color=#ff0000>)?
4. Если, например, пробелы определены как , то _IEPropertyGet($oLink, 'innerhtml') (зачем использовать $oLink.innerHTML, если есть функция?) отобразит их так же, а не пробелами, в отличии от _IEPropertyGet($oLink, 'innertext').
5. Если есть вхождения $sStr в других ссылках, то найдет и кликнет только первую, а если вхождений нет совсем, то все равно вернет 1.

Дальше лень критиковать. :smile:
 
Автор
E

Evochka Turkova

Новичок
Сообщения
39
Репутация
0
В очередной раз спасибочки. Вопрос по теме, а если вместо id указан class:

Код:
<div class="login_btn_signin">
<a class="btn_checkout_green" href="javascript:DoLogin()">
<div class="leftcap"></div><div class="rightcap"></div>
<div class="text">Войти</div>
</a>
</div>

Как выполниь вход???
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Evochka Turkova сказал(а):
Как выполниь вход???
1. Получаешь коллекцию ссылок;
2. Проходишься по этой коллекции циклом For In Next;
3. Внутри цикла проверяешь (например опиратором If) $oElement.Classname на совпадение с твоим классом "btn_checkout_green";
4. Если совпадает то делаем какие-то действия и выходим из цикла ExitLoop;
5. Делаем что-то дальше...
 
Автор
E

Evochka Turkova

Новичок
Сообщения
39
Репутация
0
alex33 типо так?? :-[

Код:
$login = "Войти"

$oLinks = _IETagNameGetCollection($oIE, 'a')
If @error Then Exit 13
For $oLink In $oLinks
    If $oLink.ClassName == "btn_checkout_green" And StringInStr($oLink.href, $login) Then
         _IEAction($oLink, 'click')
			_IELoadWait($oIE)
			   Sleep(3000)
         ExitLoop
   EndIf
Next


По кнопке щелкает, но IE не показывает что перешла :stars:
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
Evochka Turkova [?]
<div class="login_btn_signin">
<a class="btn_checkout_green" href="javascript:DoLogin()">
<div class="leftcap"></div><div class="rightcap"></div>
<div class="text">Войти</div>
</a>
</div>

В Вашем случае можно попробовать кликнуть через яву:
Код:
$oIE.document.parentwindow.eval("DoLogin()")
 
Автор
E

Evochka Turkova

Новичок
Сообщения
39
Репутация
0
Garrett хотелось бы более универсальный способ через сам скрипт. :smile: :smile: :smile:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Evochka Turkova [?]
хотелось бы более универсальный способ через сам скрипт
Причём тут скрипт! Многие функции из UDF IE.au3 могут не работать в IE11 по причине несовместимости!


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

Новый браузер Internet Explorer 11 не всегда работает правильно с некоторыми сайтами.
Улучшить взаимодействие браузера и сайта можно, включив просмотр в режиме совместимости с браузерами прошлых версий.
 

Realstar

Новичок
Сообщения
1
Репутация
0
Сам искал долго вариант чтобы кликнуть по классу тега, выручил такой небольшой код

Код:
$Inputs = _IETagNameGetCollection($oIE,'div')
		For $Input In $Inputs
  
		If $Input.classname == 'Text' Then _IEAction($Input, 'click')
	Next

в IE 11 у меня работает правда система WIN 7
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Evochka Turkova
Попробуйте так:
Код:
;~ заполняем поля
;~ ...
;~ нажимаем на 'btn_checkout_green'
$oIE.document.parentWindow.execScript("setTimeout(function(){DoLogin()},1)")
 
Автор
E

Evochka Turkova

Новичок
Сообщения
39
Репутация
0
Garrett я к тому, что хотелось бы видеть решение в самом скрипте, не зависящее от совместимости браузеров. :smile: :smile: :smile:
 
Верх