GetAttribute в Selenium VBA для стиля

Я работаю над селеном в VBA, и я сохранил переменную "post" для хранения всех вхождений определенного элемента, подобного этому.

Dim post As Object

Set post = .FindElementsByCss("#DetailSection1")
Dim i As Long
For i = 1 To post.Count
    Debug.Print post.Item(i).getAttribute("style")
Next i

Мне нужно извлечь значение стиля из элементов

<div id="DetailSection1" style="z-index:3;clip:rect(0px,746px,32px,0px);top:228px;left:0px;width:746px;height:32px;">
</div>

Также мне нужно напечатать в непосредственном окне innerHTML, и когда я использовал getAttribute("innerHTML"), у меня это не работает Любые идеи


person YasserKhalil    schedule 12.06.2020    source источник
comment
Разве вы не должны использовать получение элемента по идентификатору вместо получения его с помощью CSS?   -  person Tomasz Paluch    schedule 12.06.2020
comment
Идентификатор в моем случае не уникален. у меня 22 этого идентификатора   -  person YasserKhalil    schedule 12.06.2020
comment
Я не могу вспомнить, но разве Selenium не является основным методом Attribute(), а не getAttribute? getAttribute предназначен для узла в nodeList, а не для webElement. IIRC, но подтверждение было бы хорошо.   -  person QHarr    schedule 12.06.2020
comment
Большое спасибо за классную подсказку. Мне помогло Debug.Print .FindElementByCss("#DetailSection1").Attribute("outerHTML")   -  person YasserKhalil    schedule 13.06.2020


Ответы (1)


getAttribute("style") должен работать, но вы должны вызвать ожидание, чтобы элемент присутствовал/видим в HTML DOM .

Debug.Print post.Item(i).getAttribute("style")

А именно, чтобы извлечь значение атрибутов стиля из элементов, вы можете использовать getCssValue() следующим образом:

Debug.Print post.Item(i).getCssValue("z-index")
Debug.Print post.Item(i).getCssValue("top")
Debug.Print post.Item(i).getCssValue("left")
Debug.Print post.Item(i).getCssValue("width")
Debug.Print post.Item(i).getCssValue("height")

getAttribute("innerHTML")

get_attribute("innerHTML") можно использовать для чтения innerHTML или text в любом узле / WebElement

Вы можете найти подробное обсуждение в разделе Разница между текстом и innerHTML с использованием Selenium


использованная литература

Вы можете найти пару соответствующих обсуждений в:

person DebanjanB    schedule 12.06.2020
comment
Большое спасибо. Это вызывает ошибку. А что насчет innerHTML ? - person YasserKhalil; 12.06.2020
comment
@YasserKhalil Ознакомьтесь с обновлением ответа и дайте мне знать, если возникнут вопросы. - person DebanjanB; 12.06.2020
comment
Я использовал get_attribute("innerHTML"), а также getAttribute("innerHTML"), и оба выдают ошибку. Я не знаю, что случилось? - person YasserKhalil; 12.06.2020
comment
Не могли бы вы взглянуть на HTML, пожалуйста? pastebin.com/nu0dLvch - person YasserKhalil; 12.06.2020
comment
@YasserKhalil Обновил ответ. Поскольку элементы являются реагирующими элементами, вам нужно немного подождать, пока элемент будет присутствовать/видим, прежде чем извлекать стиль. - person DebanjanB; 12.06.2020
comment
Object doesn't support this property or method, это то, что я получил мой друг. - person YasserKhalil; 12.06.2020
comment
Это сработало для меня Debug.Print .FindElementsByCss("#DetailSection1")(1).CssValue("top"). Я работаю над VBA, и я думаю, что в этом есть разница между python и VBA. Как я могу распечатать innerhtml? Я не могу получить эту работу. - person YasserKhalil; 12.06.2020
comment
@YasserKhalil Хм, у меня нет настройки окружения VBA, но я знаю кодовую базу VBA, которую я привел для справки. Рад, что у тебя получилось. - person DebanjanB; 12.06.2020
comment
Большое спасибо. Последний пункт: как я могу распечатать innerhtml? я не могу получить эту работу - person YasserKhalil; 12.06.2020
comment
@YasserKhalil Элемент, для которого вы указали HTML, не имеет innerHTML или текста. Так что в этом случае он всегда будет возвращать пустой - person DebanjanB; 12.06.2020
comment
Итак, есть ли способ распечатать часть HTML для этого элемента? - person YasserKhalil; 12.06.2020
comment
@YasserKhalil Возможно, вы ищете getAttribute("outerHTML") - person DebanjanB; 12.06.2020
comment
Можешь попробовать это на своей стороне? ни innerHTML, ни outerHTML не работают!! - person YasserKhalil; 12.06.2020
comment
@YasserKhalil Используя getAttribute(string attributeName), возможно, вы просто нужно Text - person DebanjanB; 12.06.2020