Это первый из пары вопросов о том, как lxml и Selenium обрабатывают выражение xpath.(Хотя это и похоже, но отличается от этого вопроса ).
Итак, давайте начнем с более простого вопроса.
Вот строка:
my_str = """
<div class="container">
<div class="24">
<div class="25">forget me</div>
<div class="26">a target </div>
</div>
<div class="27">very desired
<div class="28">whatever</div>
<div class="29">another target</div>
</div>
<div class="30">go home
<div class="31">Nothing here</div>
<div class="32">somewhat desired</div>
</div>
</div>
"""
А вот выражение xpath:
simple_expression = "//*[contains(text(), 'target')]"
Теперь давайтепосмотрите, как это обрабатывается с помощью lxml:
import lxml.html
root = lxml.html.fromstring(my_str)
e = root.xpath(simple_expression)
for entry in e:
print(entry.text)
Это дает желаемый результат:
цель
другая цель
Для Selenium:
from selenium.webdriver import Chrome
driver = Chrome()
driver.get("data:text/html;charset=utf-8,{html_content}".format(html_content=my_str))
e2 = driver.find_element_by_xpath(simple_expression)
print(e2.text)
Выход на этот раз всего лишь
цель
Итак, во-первых, почему это так?Во-вторых, как сделать Selenium generae одинаковым выходом?