Python: Selenium Driver: поиск элементов, у которых «размер текста» больше «X» - PullRequest
0 голосов
/ 01 августа 2020

Привет, сообщество, не могли бы вы помочь мне со следующей проблемой? Любая помощь приветствуется !

Я ищу элементы на веб-страницах, размер текста которых больше «X» (любой заданный порог). Это в основном то, чего я пытаюсь достичь:

elements = driver.find_elements_by_xpath('//*[contains(@style,"text-size" > X)]') 

Однако я не могу выполнить это правильно. Более того, извлечение каждого элемента на веб-странице, а затем перебор свойств каждого элемента и сравнение размера текста с «X» кажется очень неэффективным и выходит за рамки моих временных ограничений.

Не могли бы вы помочь меня? Заранее всем спасибо!

1 Ответ

1 голос
/ 01 августа 2020

Это не работает, поскольку вы тестируете X внутри функции contains и сравниваете X со строкой.

//*[contains(@style,"text-size" > X)]

Предполагая, что у вас есть следующие данные:

<html>
<head>
<title>HTMLFont size</title>
</head>
<body>
<h1 style="text-size:30px;">foo</h1>
<p style="text-size:18px;">bar</p>
<div style="text-size:5px;">foobar</div>
</body>
</html>

Чтобы выбрать элементы с указанным атрибутом c size (например, больше X), вы можете использовать следующие выражения XPath 1.0. Выберите элемент с text-size > 20:

//*[contains(@style,"text-size")][substring-before(substring-after(@style,"size:"),"px")>20]

Выберите элементы с размером текста в диапазоне [5:20]:

//*[contains(@style,"text-size")][substring-before(substring-after(@style,"size:"),"px")>4 and substring-before(substring-after(@style,"size:"),"px")<21]

Боковые примечания:

  • Вы должны немного изменить эти выражения, если атрибуты style, с которыми вы имеете дело, не совсем совпадают.
  • Если вы не хотите жестко кодировать значение X непосредственно в XPath, вы можете передать его как переменную в выражении XPath (+ X +).

Код:

X= 20
driver.find_element_by_xpath('//*[contains(@style,"text-size")][substring-before(substring-after(@style,"size:"),"px")>" + X + "]')
...