Что нового

Ошибка: Variable must be of type "Object" при работе с Internet Explorer

ialse

Новичок
Сообщения
3
Репутация
0
Подскажите, не нашел ответа на свой вопрос

Пытаюсь выполнить такой простой код:

Код:
#include <IE.au3>
#include <MsgBoxConstants.au3>

If WinExists('Google - Internet Explorer') Then
WinActivate('Google - Internet Explorer')

$oIE = _IEAttach('Google','text')

$oDiv1 = $oIE.document.getElementsByClassName("content")
MsgBox(0,"Количество", $oDiv1.length)

$oDiv2 = $oDiv1.document.getElementsByClassName("ctr-p")
MsgBox(0,"Количество", $oDiv2.length)

Endif


Данные классы присутствуют на странице (приложил скрин)

Но в консоли ошибка:

Код:
>"C:\Users\alexeyig\Desktop\Скрипты тестирования\AutoIt\SciTe\..\autoit3.exe" /ErrorStdOut "C:\Users\alexeyig\Desktop\Скрипты тестирования\Test.au3"    
"C:\Users\alexeyig\Desktop\??????? ????????????\Test.au3" (14) : ==> Variable must be of type "Object".:
MsgBox(0,"??????????", $oDiv2.length)
MsgBox(0,"??????????", $oDiv2^ ERROR
>Exit code: 1    Time: 2.781
Не могут понять, неужели переменная $oDiv2 - не объект (коллекция)?
Видел примеры, где похожим образом фильтровали нужный элемент.

Вот, например: http://autoit-script.ru/index.php?topic=24771.msg140676#msg140676

Изначально поставил AutoIt 3.3.14
По рекомендациям в других темах теперь поставил AutoIt 3.3.12. Проблема осталась...
 

Вложения

hedji

Продвинутый
Сообщения
408
Репутация
89
length вместо lenght
content с маленькой буквы

Код:
#include <IE.au3>
#include <MsgBoxConstants.au3>

If WinExists('Google - Internet Explorer') Then
WinActivate('Google - Internet Explorer')

$oIE = _IEAttach('Google')

$oDiv1 = $oIE.document.getElementsByClassName("сontent")
MsgBox(0,"Количество", $oDiv1.length)

$oDiv2 = $oIE.document.getElementsByClassName("ctr-p")
MsgBox(0,"Количество", $oDiv2.length)

Endif
 
Автор
I

ialse

Новичок
Сообщения
3
Репутация
0
hedji сказал(а):
length вместо lenght
content с маленькой буквы

Код:
#include <IE.au3>
#include <MsgBoxConstants.au3>

If WinExists('Google - Internet Explorer') Then
WinActivate('Google - Internet Explorer')

$oIE = _IEAttach('Google')

$oDiv1 = $oIE.document.getElementsByClassName("сontent")
MsgBox(0,"Количество", $oDiv1.length)

$oDiv2 = $oIE.document.getElementsByClassName("ctr-p")
MsgBox(0,"Количество", $oDiv2.length)

Endif
Спасибо, действительно опечатка, сейчас поправлю в топике . Но суть проблемы не меняет, $oDiv2 все равно считается НЕ объектом.
 

hedji

Продвинутый
Сообщения
408
Репутация
89
Я предложил искать ctr-p в документе
Код:
$oDiv2 = $oIE.document.getElementsByClassName("ctr-p")
MsgBox(0,"Количество", $oDiv2.length)


Но если хотите именно внутри элемента, попробуйте так:
Код:
#include <IE.au3>
#include <MsgBoxConstants.au3>

If WinExists('Google - Internet Explorer') Then
WinActivate('Google - Internet Explorer')

$oIE = _IEAttach('Google')

$oDiv1 = $oIE.document.getElementsByClassName('content')
MsgBox(0,"Количество", $oDiv1.length)

for $i in $oDiv1
	$oDiv2 = $i.getElementsByClassName('ctr-p')
	MsgBox(0,"Количество", $oDiv2.length)
Next

Endif
 
Автор
I

ialse

Новичок
Сообщения
3
Репутация
0
hedji сказал(а):
Я предложил искать ctr-p в документе
Код:
$oDiv2 = $oIE.document.getElementsByClassName("ctr-p")
MsgBox(0,"Количество", $oDiv2.length)


Но если хотите именно внутри элемента, попробуйте так:
Код:
#include <IE.au3>
#include <MsgBoxConstants.au3>

If WinExists('Google - Internet Explorer') Then
WinActivate('Google - Internet Explorer')

$oIE = _IEAttach('Google')

$oDiv1 = $oIE.document.getElementsByClassName('content')
MsgBox(0,"Количество", $oDiv1.length)

for $i in $oDiv1
	$oDiv2 = $i.getElementsByClassName('ctr-p')
	MsgBox(0,"Количество", $oDiv2.length)
Next

Endif
Благодарю! Работает.
Так понял без For in не обойтись в таких случаях, когда знаешь структуру сайта и надо несколько раз фильтровать по разным аттрибутам.

Мне почему то казалось что объект $oIE и $oDiv1 примерно одинаковы по структуре, просто $oDiv1 это какая то часть $oIE и к $oDiv1 применимы те же методы...

Что ж, будем пользоваться For in.
 
Верх