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

如何使用Selenium Python获取span数据?元素定位失败求助

问题解决:Selenium无法获取亚马逊搜索结果元素

你的代码存在几个关键问题,导致无法成功获取目标元素,以下是具体修正方案:

核心问题点

  • 变量作用域错误:driver是amazon_data方法内的局部变量,方法外的代码无法访问它;而且你把获取元素的代码写在了方法外部,完全没参与到搜索流程中。
  • CLASS_NAME定位规则错误:By.CLASS_NAME仅支持单个类名,你传入的是多个空格分隔的类名,直接导致定位失败。
  • 等待方式不可靠:硬编码的time.sleep无法保证页面元素完全加载,容易出现元素未就绪就执行定位的情况。

修正后的代码

import time
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class Amazon():
    def amazon_data(self):
        # 初始化浏览器
        driver = webdriver.Chrome(executable_path=ChromeDriverManager().install())
        driver.get(url="https://www.amazon.com/")
        
        # 执行搜索操作
        input_search = driver.find_element(By.XPATH,"//input[@id='twotabsearchtextbox']")
        input_search.send_keys("smart phones under 100000")
        time.sleep(1)
        search_button = driver.find_element(By.XPATH,"//input[@id='nav-search-submit-button']")
        search_button.click()
        
        # 显式等待目标元素加载完成,最长等待10秒
        try:
            # 用CSS_SELECTOR定位多类名元素,类名间用点连接
            elements = WebDriverWait(driver, 10).until(
                EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".a-size-medium.a-color-base.a-text-normal"))
            )
            print(f"找到元素数量:{len(elements)}")
            
            # 遍历获取每个span的文本内容
            for elem in elements:
                print(elem.text)
        except Exception as e:
            print(f"获取元素失败:{str(e)}")
        
        # 可选:关闭浏览器
        driver.quit()

# 实例化并调用方法
object = Amazon()
object.amazon_data()

关键修改说明

  1. 调整代码结构:将获取元素的逻辑移至amazon_data方法内部,确保在搜索操作完成后执行。
  2. 替换定位方式:用By.CSS_SELECTOR替代By.CLASS_NAME,多类名的写法为每个类名前加.并去除空格(如.a-size-medium.a-color-base.a-text-normal)。
  3. 改用显式等待:使用WebDriverWait配合expected_conditions,等待元素出现后再执行定位,比time.sleep更稳定可靠。
  4. 添加异常捕获:避免因元素加载失败导致程序直接崩溃,同时输出错误信息便于排查问题。

内容的提问来源于stack exchange,提问作者Shoaib Shoukat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:32:55