当所有内容都具有相同的类时,如何访问网页中的最后一个元素?

2024-10-03 21:24:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我怀疑我在这个问题上说得是否清楚,但我想得到一个人通过Discord(网络)发送的最后一条信息。问题是,当使用web inspector尝试获取消息的唯一属性时,我注意到其他每条消息都具有相同的类,并且没有其他属性(如类、id等)可以使用。我对Selenium和HTML还不熟悉,所以我知道的不多

假设我有两条消息。第一个说“你好”,第二个说“再见”。当我键入此项时:

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

我得到“hello”,因为这两条消息共享同一个类markup-2BOw-j containerCozy-336-Cz markupRtl-3M0hmN,显然该方法会选择第一个匹配的类

我已经看过其他类似的问题,但是消息是未知的,所以我不能在find_element_by_xpath方法的末尾使用contains,也不能使用[position()=2],因为我不知道消息的编号

有办法吗


Tags: 方法网络信息消息by属性czelement
3条回答

您可以使用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简化为

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')

使用last()

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

使用find_elements\u by_xpath执行此操作。它将返回匹配WebElements的列表。在此之后,您可以使用list[-1]访问最后一个元素

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

Docs

相关问题 更多 >