Как получить доступ к последнему элементу на веб-странице, когда все имеют одинаковый класс? - PullRequest
1 голос
/ 19 февраля 2020

Я сомневаюсь, что я ясно дал понять этот вопрос, но я хочу получить последнее сообщение, отправленное человеком на Discord (через Интернет). Проблема заключается в том, что при использовании веб-инспектора для получения уникального атрибута сообщения я заметил, что каждое другое сообщение имеет тот же класс, и нет другого атрибута (например, class, id, et c), который Я могу использовать. Я новичок в Selenium и HTML, поэтому я мало что знаю.

Допустим, у меня есть 2 сообщения. Первый говорит «привет», а второй «пока». Когда я набираю это:

message = self.driver.find_element_by_xpath("//div[contains(concat(' ', normalize-space(@class), ' '), ' markup-2BOw-j containerCozy-336-Cz markupRtl-3M0hmN ')]")

, я получаю "привет", потому что оба сообщения имеют один и тот же класс markup-2BOw-j containerCozy-336-Cz markupRtl-3M0hmN, и, очевидно, метод выбирает первое, которое соответствует.

I ' Мы просмотрели другие подобные вопросы, но сообщение неизвестно, поэтому я не могу использовать ни contains, ни [position()=2] в конце метода find_element_by_xpath, потому что я не знаю номер сообщения.

Есть ли способ сделать это?

Ответы [ 3 ]

2 голосов
/ 19 февраля 2020

Вы можете использовать find_elements_by_xpath, чтобы получить список всех элементов, соответствующих локатору, и взять последний элемент в этом списке

all_messages = self.driver.find_elements_by_xpath("//div[contains(concat(' ', normalize-space(@class), ' '), ' markup-2BOw-j containerCozy-336-Cz markupRtl-3M0hmN ')]")
message = all_messages[-1]

Кстати, вы можете упростить значения xpath до * 1006. *

find_elements_by_xpath("//div[@class='markup-2BOw-j containerCozy-336-Cz markupRtl-3M0hmN']")

Или используйте css_selector вместо

find_elements_by_css_selector('.markup-2BOw-j.containerCozy-336-Cz.markupRtl-3M0hmN')
0 голосов
/ 19 февраля 2020

Использование last():

message = self.driver.find_element_by_xpath("(//div[contains(concat(' ', normalize-space(@class), ' '), ' markup-2BOw-j containerCozy-336-Cz markupRtl-3M0hmN ')])[last()]")
0 голосов
/ 19 февраля 2020

Используйте find_elements_by_xpath , чтобы сделать это. Он вернет список соответствующих веб-элементов. После этого вы можете получить доступ к последнему элементу, используя список [-1]

message = self.driver.find_elements_by_xpath("//div[@class='markup-2BOw-j containerCozy-336-Cz markupRtl-3M0hmN']")
print(message[-1].text)

Документы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...