【问题标题】:How to find aria-label element using contains in xpath如何在 xpath 中使用 contains 查找 aria-label 元素
【发布时间】:2023-10-09 11:35:01
【问题描述】:

我正在尝试获取锚标记内的信息,而不是href。我想从 eBay 上的几个卖家那里提取评分。在下面的 HTML 代码中,您可以看到在哪里可以找到评分。有没有办法在不使用href 的情况下获取有关“Bewertungspunktestand”(德语评级分数)的信息,因为href 从卖家到卖家会发生变化?此示例中的评分为 32。由于文本“Bewertungspunktestand”仅在这一行中,我认为可以让它搜索此文本并提取其中包含此文本的 aria-label。

这是this example的链接。

这是我尝试过但没有成功的 Python 代码:

try: 
    trans = driver.find_element_by_xpath("//a[@aria-label='Bewertungspunktestand']")
except:
    trans = '0'

这是 HTML 代码

<span class="mbg-l">
    (<a href="http://feedback.ebay.de/ws/eBayISAPI.dll?ViewFeedback&amp;userid=thuanhtran&amp;iid=133585540546&amp;ssPageName=VIP:feedback&amp;ftab=FeedbackAsSeller&amp;rt=nc&amp;_trksid=p2047675.l2560" aria-label="Bewertungspunktestand: 32">32</a>
    <span class="vi-mbgds3-bkImg  vi-mbgds3-fb10-49" aria-label="Gelber Stern für 10 bis 49 Bewertungspunkte" role="img"></span>)
</span>

【问题讨论】:

  • 或许trans = driver.find_element_by_xpath("//a[contains(@aria-label, 'Bewertungspunktestand')]")?

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

当然可以。使用 XPATH 的 contains 方法,结合选择任何属性(@aria-label)的能力:

//a[contains(@aria-label, 'Bewertungspunktestand:')]

具体获取该链接元素的文本值:

trans = driver.find_element_by_xpath("//a[contains(@aria-label, 'Bewertungspunktestand:')]").text

【讨论】:

    【解决方案2】:

    aria-label 属性的值不是Bewertungspunktestand 而是Bewertungspunktestand: 32

    要打印来自innerHTML 的值,即32,您可以使用以下任一Locator Strategies

    • 使用css_selectortext属性:

      driver.get('https://www.ebay.de/itm/Apple-MacBook-Pro-15-Laptop-mit-Touchbar-512GB-MPTT2D-A-Wie-neu/133585540546?nordt=true&nma=true&orig_cvip=true')
      print(driver.find_element_by_css_selector("a[aria-label^='Bewertungspunktestand']").text)
      
    • 使用xpathget_attribute()

      driver.get('https://www.ebay.de/itm/Apple-MacBook-Pro-15-Laptop-mit-Touchbar-512GB-MPTT2D-A-Wie-neu/133585540546?nordt=true&nma=true&orig_cvip=true')     
      print(driver.find_element_by_xpath("//a[starts-with(@aria-label, 'Bewertungspunktestand')]").get_attribute("innerHTML"))
      

    理想情况下,您需要为visibility_of_element_located() 诱导WebDriverWait,您可以使用以下任一Locator Strategies

    • 使用CSS_SELECTORget_attribute()

      driver.get('https://www.ebay.de/itm/Apple-MacBook-Pro-15-Laptop-mit-Touchbar-512GB-MPTT2D-A-Wie-neu/133585540546?nordt=true&nma=true&orig_cvip=true')
      print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "a[aria-label^='Bewertungspunktestand']"))).get_attribute("innerHTML"))
      
    • 使用XPATHtext属性:

      driver.get('https://www.ebay.de/itm/Apple-MacBook-Pro-15-Laptop-mit-Touchbar-512GB-MPTT2D-A-Wie-neu/133585540546?nordt=true&nma=true&orig_cvip=true')
      print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//a[starts-with(@aria-label, 'Bewertungspunktestand')]"))).text)
      
    • 控制台输出:

      MyMercy User
      
    • 注意:您必须添加以下导入:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      

    您可以在How to retrieve the text of a WebElement using Selenium - Python找到相关讨论


    结尾

    链接到有用的文档:

    【讨论】:

      最近更新 更多