python 循环中是否有XPATH目标div和图像?

ubof19bj  于 2022-12-10  发布在  Python
关注(0)|答案(2)|浏览(132)

文档结构如下:

<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没有类。:(
谢谢你!

ni65a41a

ni65a41a1#

在span中似乎没有这样的div类,称为:更新组件文本
您的意思是:* 更新组件执行元 *?
我不是一个xpath的粉丝,但是当我复制你的html和img选择器时,它确实找到了2个img,也许你没有等待元素加载,然后它失败了?试着在你的代码中使用隐式/显式等待。
我知道您使用的是xpath,但请考虑使用css。
这也许能达到目的:

.feed-shared-update-v2 span:nth-of-type(2)

如果你想要一个img的CSS:

.feed-shared-update-v2 img
p5cysglq

p5cysglq2#

我猜你过度使用following::轴了。简单地尝试下面的方法(没有双关语):
第一次使用表达式时

//*[contains(@class, 'feed-shared-update-v2')]/..

这将选择<div class="feed-shared-update-v2">的父元素<div>。因此,您将选择整个周围元素。
若要撷取您要的子系,请使用下列XPath:.//img/@src.//span[2]。完整代码为

for card in elements:
  profilePic = card.find_element(By.XPATH, ".//img").get_attribute('src')
  text = card.find_element(By.XPATH, ".//span[2]").text

就这些希望能有所帮助。

相关问题