Python Selenium设亚马逊购物车数量999查库存遇报错求助
Selenium操作亚马逊购物车数量选择的问题修复
报错与运行失效的核心原因
- 操作逻辑错误:代码中将存储XPath路径的纯字符串变量,直接当成可交互的Selenium页面元素对象调用方法,没有通过
find_element()方法将路径对应的真实页面元素加载为WebElement实例,因此字符串对象不存在send_keys方法,触发对应的属性报错 - 语法书写错误:
input999.send.keys(search_text)属于无意义写法,Selenium的元素输入方法为send_keys(),且代码中并未提前定义search_text变量 - 定位稳定性问题:你编写的包含
sc-item-C5bd1271b-b46a-4d6e-901c-b5109e1e4868的XPath,嵌入了亚马逊动态生成的临时购物车项UUID,每次刷新页面、调整购物车商品排序时,这串标识都会发生变化,硬编码的路径无法长期稳定定位元素 - 细节语法问题:原代码XPath中附带的
"是网页HTML解析时的转义双引号,不能直接写入Python代码,需要替换为正常的双引号,否则会直接触发元素找不到的异常
注意:亚马逊购物车的数量下拉默认仅展示1-10的快捷选项,不存在直接点击选择999的入口,你想实现的“输入999查询真实库存”的逻辑,需要通过直接操作输入框输入值、让页面自动校验库存的方式实现,不需要强行触发下拉菜单的固定选项。
可正常运行的实现参考
调整操作逻辑,移除不稳定的动态定位路径,改用页面固定的元素属性定位,直接操作数量输入框完成目标:
from __future__ import unicode_literals from selenium import webdriver from time import sleep from selenium.webdriver.common.keys import Keys # 初始化浏览器,Windows路径前加r避免反斜杠被Python转义 driver = webdriver.Chrome(r'C:\chromedriver_win32\chromedriver.exe') url = 'https://www.amazon.fr/Raspberry-Tactile-Ventilateur-Moniteur-320x480/dp/B07WSVS1Q1/' driver.get(url) sleep(3) # 同意cookie弹窗 driver.find_element_by_xpath('//*[@id="a-autoid-0"]/span').click() sleep(3) # 商品页点击加入购物车 driver.find_element_by_xpath('//*[@id="submit.add-to-cart"]/span/input').click() sleep(3) # 跳过延保推荐 driver.find_element_by_xpath('//*[@id="siNoCoverage"]/span').click() sleep(3) # 跳转购物车页面 driver.find_element_by_xpath('//*[@id="hlb-view-cart"]/span').click() sleep(7) # 核心逻辑:用固定name属性定位数量输入框,不依赖动态UUID路径 quantity_input = driver.find_element_by_css_selector("input[name='quantityBox']") # 清空输入框原有内容 quantity_input.clear() # 输入目标值999 quantity_input.send_keys("999") # 触发回车提交数量修改 quantity_input.send_keys(Keys.ENTER) sleep(3)
优化提示
- 如果页面的数量选择是标准下拉结构,可以引入Selenium内置的
Select类简化操作,不需要手动模拟点击:from selenium.webdriver.support.ui import Select select_elem = Select(driver.find_element_by_css_selector("select[name='quantity']")) select_elem.select_by_value("1") - 尽量减少
sleep硬等待的使用,可以替换为显式等待,提升脚本的运行稳定性
内容的提问来源于stack exchange,提问作者Moto Jero
相关产品推荐
相关产品推荐

