В моей программе мне иногда нужно очистить текст от невидимого / скрытого веб-элемента. Я знаю, WebDriver
обычно возвращает видимый текст, и что можно очистить скрытый / невидимый текст одним из следующих способов (как предложено в , этом и этом потоке в SO):
JavascriptExecutor js = (JavascriptExecutor) driver;
scrapedText = js.executeScript ("return arguments[0].innerHTML", webElement).toString();
Или по телефону:
element.attribute('textContent')
element.attribute('innerText')
element.attribute('innerHTML')
Хотя оба эти решения работают, они будут извлекать текст, который не только невидим, но и обычно не идентифицируется с помощью метода getText()
. Например, в следующем HTML:
textContent, innerText or innerHTML
все вернет элемент <img
, хотя я пытаюсь определить атрибут 'href'
(используя XPath
'//a[contains(@href, 'brands_browse-bin')]
')
Другими словами, я пытаюсь создать универсальное решение, в котором моя программа всегда идентифицирует невидимые / скрытые элементы без идентификации дополнительных элементов, как при использовании textContent, innerText or innerHTML
(в основном я хочу получить тот же результат, что и при вызове * 1028) * с только исключением, что он включает скрытые элементы)
Возможно ли это?
Спасибо
Обновление:
Если вы перейдете к: https://www.amazon.com/dp/B01H4LBIVC и попытаетесь очистить «цену» (например, с помощью .//*[@id='priceblock_ourprice']
), она не будет работать, так как элемент не виден (я знаю, я мог бы сделать его видимым с помощью нажав «Однократная покупка»). Если бы я решил получить элемент с помощью одного из методов, перечисленных выше - я смог бы получить цену, но она также получит неправильное значение в приведенном выше примере HTML. Если есть метод, который идентифицирует скрытые элементы (аналогично getText()
), но не включает автоматически «innerHTML» и т. Д., Эта проблема не будет присутствовать. Короче говоря, мне нужно универсальное решение, которое определит «цену» (которая скрыта в приведенном выше примере), а также определит правильный элемент в приведенном выше фрагменте HTML.