如何在xpath中使用contains查找aria标签元素

2024-04-25 20:52:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试获取锚标记中的信息,但不是href。我想从ebay上的几个卖家那里提取评级分数。在下面的HTML代码中,您可以看到评级分数的位置。 有没有一种方法可以在不使用href的情况下获取关于“Bewertungspunktestand”(德语表示评级分数)的信息,因为href会随着卖家的不同而变化。本例中的评分为32分。 由于文本“Bewertungspunktestand”仅在这一行中,我认为可以让它搜索此文本并提取包含此文本的aria标签

这是本例的链接: 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

这是我尝试过但没有解决的python代码:

尝试: trans=driver。通过xpath(//a[@aria label='Bewertungspunktestand'])查找元素 除: 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>

Tags: 代码文本信息truehtml分数labelamp
2条回答

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

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

特别是要获取该链接元素的文本值:

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

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

要从innerHTML打印值,即32,可以使用以下Locator Strategies之一:

  • 使用css_selector文本属性:

    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"))
    
  • 使用XPATH文本属性:

    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
    

You can find a relevant discussion in How to retrieve the text of a WebElement using Selenium - Python


奥特罗

链接到有用的文档:

相关问题 更多 >