猿问

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

我怀疑我在这个问题上说得很清楚,但我想得到一个人在Discord上发送的最后一条消息(通过网络)。问题是,当使用Web检查器尝试获取消息的唯一属性时,我注意到所有其他单个消息都具有相同的类,并且没有其他属性(如类,id等)可以使用。我是Selenium和HTML的新手,所以我不太了解。

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

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

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

有没有办法做到这一点?


慕容森
浏览 154回答 3
3回答

桃花长相依

您可以使用 来获取与定位器匹配的所有元素的列表,并获取该列表中的最后一个项目find_elements_by_xpathall_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]顺便说一句,您可以简化到xpathfind_elements_by_xpath("//div[@class='markup-2BOw-j containerCozy-336-Cz markupRtl-3M0hmN']")或改用css_selectorfind_elements_by_css_selector('.markup-2BOw-j.containerCozy-336-Cz.markupRtl-3M0hmN')

慕雪6442864

用: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_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)
随时随地看视频慕课网APP

相关分类

Python
我要回答