Что нового

[Сеть, интернет] Не работает _ielinkclickbyindex и bytext

muskat_59

Новичок
Сообщения
23
Репутация
0
Очень хотелось бы знать почему иногда не работает. Вот, что я заметил, если страница
Код:
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
тогда все работает, если же страница
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru"> 
<head profile="http://gmpg.org/xfn/11">
тогда эти функции не работают, к сожалению именно они мне и нужны. Если точнее, то мне нужен универсальный способ, при этом все должно быть точно так же просто, как и с функциями _IELinkClickByIndex и _IELinkClickByText. (Обязательно с передачей данных о странице с которой перешли, поэтому поиск ссылки и ienavigate не подойдет).
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
muskat_59
А в чём собственно выражается неработоспособность функций?
Разница в написание кода заголовка документа не должна влиять на работу функций!

Вот тестовый пример, он прекрасно работает:

test.html
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head profile="http://gmpg.org/xfn/11"> 
  <title>Заголовок</title>
</head>
<body>
  <a href="http://yandex.ru">Яндекс</a>
</body>
</html>

Код:
#include<IE.au3>
$oIE = _IECreate(@ScriptDir & "\test.html")
_IELinkClickByText($oIE, "Яндекс")
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
muskat_59
Можно еще так попробовать:
Код:
#include <IE.au3>

$sSearchLink = 'Переводчик'
$sUrl = 'http://www.google.ru/'
$fYes = False

$oIE = _IECreate($sUrl)
$oLinks = _IELinkGetCollection($oIE)
For $oLink In $oLinks
	If $oLink.innertext == $sSearchLink Then
		$fYes = True
		_IEAction($oLink, 'click')
		ExitLoop
	EndIf
Next
If Not $fYes Then
	MsgBox(16, 'Error', 'Ссылку ' & $sSearchLink & ' не нашли')
	_IEQuit($oIE)
	Exit
EndIf
_IELoadWait($oIE)
MsgBox(64, 'OK', 'OK')
;дальнейший код
 
Автор
M

muskat_59

Новичок
Сообщения
23
Репутация
0
madmasles Все бы ничего, да вот ошибку выдает и все :(. Может чего не учел я?
The requested action with this object has failed.:
If $oLink.innertext == $sSearchLink Then
If $oLink.innertext ^ ERROR
GarrettНаверное дело не только в заголовке, а в структуре всей странички, вот к примеру http://mail.ru/ что то не работает у меня на мэйле(
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
muskat_59 [?]
GarrettНаверное дело не только в заголовке, а в структуре всей странички, вот к примеру http://mail.ru/ что то не работает у меня на мэйле(
Какую ошибку выдаёт?
На httр://mail.ru всё прекрасно работает ;)
Код:
#include<IE.au3>
$oIE = _IECreate("http://mail.ru/")
_IELinkClickByText($oIE, "Москва")
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
muskat_59
Если в моем коде поменять
Код:
;...
$sSearchLink = 'Переводчик'
$sUrl = 'http://www.google.ru/'
;на
$sSearchLink = 'Путешествия'
$sUrl = 'http://www.mail.ru/'
;...
То у меня все прекрасно работает.
 
Автор
M

muskat_59

Новичок
Сообщения
23
Репутация
0
Ну вот, а можно универсальный способ? к примеру на рэндомную ссылку нажимать? Заранее спасибо
 
Автор
M

muskat_59

Новичок
Сообщения
23
Репутация
0
ну т.е. чтобы получилось что-то вроде
Код:
$num = random(1, 10, 1)
_IELinkClickByIndex($oIE, $num)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
muskat_59
Так, наверное, правильнее будет
Код:
#include <IE.au3>

$sUrl = 'http://www.mail.ru/'

$oIE = _IECreate($sUrl)
$oLinks = _IELinkGetCollection($oIE)
$iNumLinks = @extended
ConsoleWrite($iNumLinks & @CR)
If $iNumLinks Then
	$iNun = Random(0, $iNumLinks - 1, 1)
	ConsoleWrite($iNun & @CR)
	_IELinkClickByIndex($oIE, $iNun)
	MsgBox(64, 'OK', 'OK')
Else
	MsgBox(16, 'Error', 'Error')
EndIf
Вдруг на сайте ссылок меньше 10 или их вообще нет. :smile:

PS
На будущее, одна тема - один вопрос.
 
Автор
M

muskat_59

Новичок
Сообщения
23
Репутация
0
:( ну не работает ваш код, я уже не знаю, как быть
 
Автор
M

muskat_59

Новичок
Сообщения
23
Репутация
0
У меня IE 9 beta. Конкретно? После загрузки первой страницы, скрипт "нажимает" на ссылку,ошибки не обнаруживаются, но переход отсутствует.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
muskat_59
Сохраните (полный) код страницы из IE9 в тестовый файл и выложите здесь, пожалуйста.
Ещё, укажите ссылку, по которой нужно кликнуть.
 

beaver

Новичок
Сообщения
58
Репутация
2
Garrett сказал(а):
muskat_59
Сохраните (полный) код страницы из IE9 в тестовый файл и выложите здесь, пожалуйста.
Ещё, укажите ссылку, по которой нужно кликнуть.

Подтверждаю, что функция _IELinkClickByText перестает работать в IE9. Вчера официально обновил IE8 на IE9 и ранее работающие скрипты валятся на элементарных действиях.

А вот как выглядит ссылка в IE8 и IE9 (и там и там идентично):
Код:
<a href="/register/" title="Зарегистрироваться" rel="step-1-1" id="registrationLink"><strong>Зарегистрироваться</strong></a>

Вот как я кликаю по ссылке в AutoIt:
Код:
_IELinkClickByText ($oIE, "Зарегистрироваться")



Результат - ссылка не открывается.
@Error=0 @Extended=0
 
Верх