Selenium/Python无法定位亚马逊商品页发货方元素求助
解决方案
1. 修正选择器使用逻辑
By.CLASS_NAME只能传单个类名,不能用空格或点连接多个类——这是你之前报错的核心原因。要定位多类元素,必须用By.CSS_SELECTOR,正确写法是:span.a-size-small.offer-display-feature-text-message(不要加多余引号)。
2. 必须加显式等待
亚马逊页面动态加载性强,直接定位大概率会因为元素未渲染完成失败,用显式等待稳得多:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 最长等待10秒,直到元素出现 wait = WebDriverWait(driver, 10) dispatch_element = wait.until( EC.presence_of_element_located( (By.CSS_SELECTOR, "span.a-size-small.offer-display-feature-text-message") ) ) # 获取发货方文本 dispatch_text = dispatch_element.text # 判断是否非亚马逊发货 if "Amazon" not in dispatch_text: print("该商品非亚马逊发货") else: print("该商品由亚马逊发货")
3. 备选定位方案(应对页面结构变化)
如果上述CSS选择器失效,用XPath关联“Dispatches From”标签来定位内容:
dispatch_element = wait.until( EC.presence_of_element_located( (By.XPATH, "//div[contains(text(), 'Dispatches From')]/following-sibling::div//span") ) )
4. 处理滚动加载
如果还是找不到,可能是发货信息在页面下半部分,需要先滚动到对应区域:
# 滚动到页面中间位置(按需调整) driver.execute_script("window.scrollTo(0, document.body.scrollHeight / 2);") # 再执行显式等待定位
内容的提问来源于stack exchange,提问作者boston_019
相关产品推荐
相关产品推荐

