python - 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::产品页面检查模式
解决方案
价格不在同一级别,因此您必须单独获取它们然后将它们组合起来。这是一种方法:
此 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()
推荐阅读
- r - 过滤列是否包含外部列表中的字符部分
- html - 在 jquery 中查找嵌套的 HTML 值
- woocommerce - br_product_of_day 中的产品简短描述
- dns - 我可以有多个唯一的 CNAMES 指向同一主机吗?
- c# - 'Bairstow' 附近的语法不正确。我收到存储在 sql server 中的播放器名称错误
- python - PyQt5 app compiled with PyInstaller using --onefile and --noconsole, but exe fails to launch
- javascript - 来自solidity合约的app.js文件中的getJSON()出错
- c++ - make 命令返回错误:使用 open-opcua 构建 libOpenOpcUaSharedlib.so 时使用不完整类型无效
- python - 当特定用户在频道中发送消息时,如何让我的不和谐机器人做出响应?
- laravel - Origin 标头在 L5 Swagger 中不起作用 - Laravel