繁体   English   中英

如何使用 selenium 循环元素

[英]How to loop over elements with selenium

我想使用 selenium 循环网页上的几个 div 并找到 div 的内容

网页的基本设置如下所示:

<html>
   <div data-testid="property-card">
       <div data-testid="title">content 1</div>
   </div>
   <div data-testid="property-card">
       <div data-testid="title">content 2</div>
   </div>
   <div data-testid="property-card">
       <div data-testid="title">content 3</div>
   </div>
</html>

这是我的代码:

def report_results(self):
    hotel_boxes = self.find_elements(By.XPATH, '//div[@data-testid="property-card"]')
    for hotel in hotel_boxes:
        hotel_name = hotel.find_element(By.XPATH, '//div[@data-testid="title"]').get_attribute('innerHTML')
        print(hotel_name)

但是,问题在于这只会打印“内容1”三遍。 我在这里做错了什么?

你快到了,你唯一缺少的一件事就是一个点. 在 XPath 表达式的前面。
它应该是

hotel_name = hotel.find_element(By.XPATH, './/div[@data-testid="title"]').get_attribute('innerHTML')

当使用'//div[@data-testid="title"]' XPath 表达式时,它将从页面顶部搜索匹配的定位器,直到找到第一个匹配项
当我们有那个点时. 这意味着在当前节点开始搜索,即在父元素hotel
因此,您的整个代码可以是:

def report_results(self):
    hotel_boxes = self.find_elements(By.XPATH, '//div[@data-testid="property-card"]')
    for hotel in hotel_boxes:
        hotel_name = hotel.find_element(By.XPATH, './/div[@data-testid="title"]').get_attribute('innerHTML')
        print(hotel_name)

根据给定的 HTML:

<html>
   <div data-testid="property-card">
       <div data-testid="title">content 1</div>
   </div>
   <div data-testid="property-card">
       <div data-testid="title">content 2</div>
   </div>
   <div data-testid="property-card">
       <div data-testid="title">content 3</div>
   </div>
</html>

要打印后代<div>标记的innerText ,您可以使用列表推导,并且可以使用以下任一定位器策略

  • 使用CSS_SELECTORtext属性:

     print([my_elem.text for my_elem in driver.find_elements(By.CSS_SELECTOR, "div[data-testid='property-card'] > [data-testid='title']")])
  • 使用XPATH.get_attribute('innerHTML')

     print([my_elem..get_attribute('innerHTML') for my_elem in driver.find_elements(By.XPATH, "//div[@data-testid='property-card']/div[@data-testid='title']")])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM