首页 > 解决方案 > 确认 XPATH 中的前同级和后同级

问题描述

我有以下语句来检查元素中是否存在 2 个条件:

 if len(driver.find_elements(By.XPATH, "//span[text()='$400.00']/../following-sibling::div/a[text()='Buy']")) > 0:
   elem = driver.find_element(By.XPATH, "//span[text()='$400.00']/../following-sibling::div/a[text()='Buy']")

我尝试了一些变体,包括“preceding brother::span[text()='x'”,但似乎无法使语法正确,或者我是否以正确的方式进行。

HTML 如下。当前的 find_elements(By.XPATH...) 正确找到了“Total”和“Buy”类,我还想在“price”类中添加 20.00 美元作为条件。

    <ul>
       <li class="List">
           <div class="List-Content row">
               <div class="Price">"$20.00"</div>
               <div class="Quantity">10</div>
               <div class="Change">0%</div>
               <div class="Total">
                   <span>$400.00</span>
               </div>
               <div class="Buy">
                   <a class="Button">Buy</a>
               </div>
           </div>
        </li>
    </ul>

标签: pythonselenium

解决方案


使用内置的 ElementTree

import xml.etree.ElementTree as ET


html = '''<li class="List">
   <div class="List-Content row">
       <div class="Price">"$20.00"</div>
       <div class="Quantity">10</div>
       <div class="Change">0%</div>
       <div class="Total"><span>$400.00</span></div>
       <div class="Buy"><a class="Button">Buy</a></div>
   </div>
   <div class="List-Content row">
       <div class="Price">"$27.00"</div>
       <div class="Quantity">10</div>
       <div class="Change">0%</div>
       <div class="Total"><span>$400.00</span></div>
       <div class="Buy"><a class="Button">Buy</a></div>
   </div>
</li>'''

items = {'Total':'$400.00','Buy':'Buy','Price':'"$20.00"'}

root = ET.fromstring(html)
first_level_divs = root.findall('div')
for first_level_div in first_level_divs:
    results = {}
    for k,v in items.items():
        div = first_level_div.find(f'.div[@class="{k}"]')
        one_level_down = len(list(div)) > 0
        results[k] = list(div)[0].text if one_level_down else div.text
    if results == items:
        print('found')
    else:
        print('not found')
    results = {}

输出

found
not found 

推荐阅读