文档结构如下:
<div class="search-results-container">
<div>
<div class="feed-shared-update-v2">
<div class="update-components-actor">
<div class="update-components-actor__image">
<img class="presence-entity__image" src="https://www.testimage.com/test.jpg"/>
<span></span>
<span>test</span>
</div>
</div>
</div>
</div>
<div>
<div class="feed-shared-update-v2">
<div class="update-components-actor">
<div class="update-components-actor__image">
<img class="presence-entity__image" src="https://www.testimage.com/test.jpg"/>
<span></span>
<span>test</span>
</div>
</div>
</div>
</div>
</div>
我不知道最好的方法,但是希望有人能帮忙。我有一个for循环,它可以抓取所有在div前面的div,类为“feed-shared-update-v2”。它可以工作:
elements = driver.find_elements(By.XPATH, "//*[contains(@class, 'feed-shared-update-v2')]//preceding::div[1]");
然后我运行一个for循环:
for card in elements:
然而,我在尝试将img和这些for循环中的第二个span作为目标时遇到了麻烦。我尝试:
for card in elements:
profilePic = card.find_element(By.XPATH, ".//following::div[@class='update-components-actor']//following::img[1]").get_attribute('src')
text = card.find_element(By.XPATH, ".//following::div[@class='update-components-text']//following::span[2]").text
但这会产生一个错误:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":".//following::div[@class='update-components-actor']//following::img[1]"}
我知道这是我的xpath语法,不允许我链接“following”(尽管只是尝试.//following也不起作用,那么“.//”是不是不正确的语法?),但我不确定正确的语法应该是什么,特别是因为span没有类。:(
谢谢你!
2条答案
按热度按时间ni65a41a1#
在span中似乎没有这样的div类,称为:更新组件文本
您的意思是:* 更新组件执行元 *?
我不是一个xpath的粉丝,但是当我复制你的html和img选择器时,它确实找到了2个img,也许你没有等待元素加载,然后它失败了?试着在你的代码中使用隐式/显式等待。
我知道您使用的是xpath,但请考虑使用css。
这也许能达到目的:
如果你想要一个img的CSS:
p5cysglq2#
我猜你过度使用
following::
轴了。简单地尝试下面的方法(没有双关语):第一次使用表达式时
这将选择
<div class="feed-shared-update-v2">
的父元素<div>
。因此,您将选择整个周围元素。若要撷取您要的子系,请使用下列XPath:
.//img/@src
和.//span[2]
。完整代码为就这些希望能有所帮助。