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

使用Selenium自动化Amazon加购时遇ElementNotFound Exception异常求建议

问题

已实现亚马逊商品搜索的自动化流程,但无法将商品加入购物车,触发ElementNotFound Exception异常。搜索等所有步骤都正常,唯独在点击加入购物车按钮时,WebDriver无法找到该元素。已尝试使用显式等待(Explicit Time)和XPATH定位,但均无效。

附上代码:

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

global browser 
browser= webdriver.Chrome()
browser.get("https://www.google.com") 
wait = WebDriverWait(browser,45)
search = browser.find_element(By.NAME,"q") 
search.send_keys("Amazon")
search.send_keys(Keys.RETURN) 
wait.until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT,"amazon.in"))).click()
search = wait.until(EC.presence_of_element_located((By.ID,"twotabsearchtextbox"))) 
search.send_keys("PS5") 
search.send_keys(Keys.RETURN)
wait.until(EC.presence_of_element_located((By.LINK_TEXT,"Sony PS5 PlayStation Console"))).click()
try:
    add_to_cart_button = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="add-to-cart-button"]')))
    add_to_cart_button.click()
except Exception as e:
    print("Error:", e)
finally:
    browser.quit()

time.sleep(2)
browser.quit()
解决方案
  • 检查并切换iframe:部分亚马逊页面会将加购按钮嵌入iframe中,WebDriver默认在主文档中查找元素,需先切换到对应iframe:
    # 在查找加购按钮前添加:
    iframe = wait.until(EC.presence_of_element_located((By.XPATH, "//iframe[contains(@src, 'cart')]")))
    browser.switch_to.frame(iframe)
    # 操作完加购按钮后切回主文档:
    browser.switch_to.default_content()
    
  • 优化元素定位与等待条件:
    1. 不要依赖固定ID,亚马逊页面元素ID可能动态变化,改用更稳定的定位方式:
      # 示例:用CSS选择器定位
      add_to_cart_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#add-to-cart-button")))
      # 或用按钮文本定位(适配amazon.in英文界面)
      add_to_cart_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@value='Add to Cart']")))
      
    2. 替换presence_of_element_located为element_to_be_clickable,确保元素不仅存在,还处于可点击状态。
  • 处理新标签页切换:点击商品链接后可能打开新标签页,WebDriver仍停留在原窗口,需切换到新窗口:
    # 在点击商品链接后添加:
    windows = browser.window_handles
    browser.switch_to.window(windows[-1])
    
  • 修复代码冗余问题:finally块已执行browser.quit(),后面的time.sleep(2)和browser.quit()属于冗余代码,会导致报错,需删除。

内容的提问来源于stack exchange,提问作者Torch Bearer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:57:37