Ошибка с Python Selenium с использованием `find_element_by_xpath (xpath)` - PullRequest
0 голосов
/ 19 марта 2020

Я использую Python Selenium, чтобы попытаться очистить или получить данные, потому что l xml так плохо документирован с помощью синтаксического анализа HTML и получения данных с использованием xpath, и что бы я ни пытался, с этой библиотекой ничего не работает.

У меня есть некоторый успех с Селеном, например: (но не всегда - отсюда и этот вопрос)

element = self.driver.find_element_by_xpath(xpath)
print(element.text)

Проблема:

Если у меня есть такой HTML сегмент в документе HTML:

<strong>Address:</strong>
24 some street, CA
<strong>Company:</strong>
ACME Inc.

, и я использую Firefox, чтобы получить xpath данных, или плагин Chrome, чтобы получить xpath к «24 какая-то улица, Калифорния», я не могу его получить (и не дает мне xpath к данным).

Я могу получить только xpath для «Address:», но мне это не нужно Мне нужны данные после закрывающего тега </strong>.

Путь к тексту 'Адрес:' может быть примерно таким:

/html/body/div[2]/div[4]/div[1]/span/strong[2]

Что тогда это xpath к тексту после этого закрывающего тега </strong>, который даст мне все до следующего начального тега <strong>?


* 10 28 * Обновление:

Я уверен, что следующий текст является правильным xpath к тексту после тегов <strong></strong>, но Selenium это не нравится.

Когда Я использую это с Selenium со следующим xpath, он не работает

xpath_wo_num = '/html/body/div[2]/div[4]/div[1]/span/strong[1]/following-sibling::text()[1]'
element = self.driver.find_element_by_xpath(xpath_wo_num)

Разработчики Selenium вставили указанный c код, который отклонил бы правильный xpath, потому что он возвращает TEXT.


Я получаю это сообщение об ошибке:

Message: invalid selector:
The result of the xpath expression "/html/body/div[2]/div[4]/div[1]/span/strong[1]/following-sibling::text()[1]" is: [object Text].
It should be an element.
(Session info: headless chrome=80.0.3987.132)

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Попробуйте что-то вроде этого:

acme = """
<span>
  <strong>Address:</strong>
24 some street, CA
<strong>Company:</strong>
ACME Inc. 
</span>
"""
import lxml.html

doc = lxml.html.fromstring(acme)
street = doc.xpath('//span/strong[1]/following-sibling::text()[1]')
print(street[0].strip())

24 какая-то улица, CA

Выход:

0 голосов
/ 20 марта 2020

вам нужно использовать родного брата. как то так

find_element_by_xpath(//strong/following-sibling::text()[1])

enter image description here

...