You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python Selenium实现Flipkart平台商品按人气排序

问题原因

你现有代码存在两个核心错误:

  1. 定位表达式与实际HTML结构不匹配:你提供的排序选项为span标签,但你的XPATH规则写的是匹配div标签,自然无法命中元素
  2. 定位语法错误:presence_of_element_located方法需要接收(定位方式, 定位表达式)格式的元组,你错误写成了By.XPATH(表达式)的函数调用形式,属于基础语法错误

另外补充两个稳定性优化点:

  • 优先使用element_to_be_clickable替代presence_of_element_located,避免元素已存在但还未渲染完成无法点击的问题
  • 用normalize-space()处理文本前后可能存在的空白字符,避免因为文本带隐含空格导致匹配失败
  • Windows文件路径建议加r标记为原始字符串,避免反斜杠转义导致路径识别错误

修正后的可运行代码

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

product = input("Which product review you want: ").lower()
print(f"Best {product} in your range from famous website")

# 加r标记为原始字符串,避免路径转义问题
PATH = r"C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)

try:
    driver.get("https://www.flipkart.com/")
    search = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.NAME,"q"))
    )
    search.send_keys(product)
    search.send_keys(Keys.ENTER)
    # 修正XPATH和定位语法,使用element_to_be_clickable提升稳定性
    pop = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//span[normalize-space(text())='Popularity']"))
    )
    pop.click()
    print(driver.current_url)
    time.sleep(2)

finally:
    time.sleep(2)
    driver.quit()

如果运行后仍然无法点击,可以尝试在点击前加1秒强制等待,或者用JS执行点击的方式替代原生click,避免元素被遮挡的问题:

# 替换pop.click()为下面的代码
driver.execute_script("arguments[0].click();", pop)

内容的提问来源于stack exchange,提问作者Sarthak Hingankar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:39:06