首页 > 解决方案 > Selenium:如何比较来自相同类型类名的值并使用 python 单击具有最高值的链接

问题描述

我在一个锚标签下有 5 或 6 个产品,在同一个锚标签中,产品名称和价格具有不同的 div。我正在尝试比较所有产品的价格,然后单击价格最高的链接。

我的方法是:

 product = driver.find_elements_by_xpath('//div[@class="slug__Grid-vcgsbx-0 hPFNJV pb-24 my-4 md:pb-4"]')
    for individual in product:
        productlink = individual.find_elements_by_tag_name("a")
        for link in productlink:
            data['link']= link.get_attribute('href')
            print(link.get_attribute('href'))
            name = link.find_elements_by_xpath('//p[@class="Card___StyledP4-sc-1629dl9-4 fWEsJX text-sm text-gray-800"]')
            price = link.find_element_by_xpath('//p[@class="Card___StyledP2-sc-1629dl9-1 cFzjHk"]')
            for singlename in name:
                data["name"]=singlename.text
                print(singlename.text)
                for singleprice in price:
                    data["price"]=singleprice.text

我只是从页面中抓取了值,但无法就我应该如何做这件事做出逻辑。我添加了一个页面链接和一张图片(如果你不想点击链接,你可以看到照片)。

页面链接::问题页面链接

图片::产品前端页面

Image2::产品页面检查模式

标签: pythonseleniumselenium-chromedriver

解决方案


价格不在同一级别,因此您必须单独获取它们然后将它们组合起来。这是一种方法:

此 xpath 将获得已降低的价格

salePrices = driver.find_elements_by_xpath("//p[contains(@class,'Card___StyledP2')]")

此 xpath 将获得标准价格

regularPrices = driver.find_elements_by_xpath("//p[contains(@class,'Card___StyledP3')]")

然后您需要合并所有价格,删除符号并将它们转换为整数以便比较它们。

for p in salePrices:
prices.append(int(p.text.replace('৳','')))

for r in regularPrices:
    prices.append(int(r.text.replace('৳','')))

要找到最大的,请使用 max()

greatestPrice = max(prices)

要单击该元素,请转换回字符串

driver.find_element_by_xpath(f"//p[contains(normalize-space(.), '{str(greatestPrice)}')]").click()

推荐阅读