如何用Python/Selenium获取亚马逊商品星级?代码尝试失败求助
解决Python/Selenium获取亚马逊商品星级失败的问题
我尝试用Python/Selenium获取亚马逊商品页面(https://www.amazon.com/dp/B09VDD8D8R)的星级,期望结果为“4.1 out of 5 stars”,但现有代码无法成功获取。以下是我的代码:
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() chrome_options = webdriver.ChromeOptions() chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) chrome_options.add_experimental_option("detach", True) prefs = { 'profile.default_content_setting_values': { 'images': 2, } } chrome_options.add_experimental_option('prefs', prefs) chrome_options.add_argument('lang=en') driver = webdriver.Chrome(options=chrome_options) driver.maximize_window() driver.get('https://www.amazon.com/dp/B09VDD8D8R') page_star = driver.find_element(By.CLASS_NAME,"a-icon-alt") page_star_text = page_star.text # 期望page_star_text的值为“4.1 out of 5 stars”
(元素截图说明:星级对应的是一个带a-icon-alt类的图标元素,目标星级文本存储在该元素的alt属性中)
问题原因及修复方案
1. 文本获取方式错误
目标星级文本并非元素的文本内容,而是存储在元素的alt属性里,直接使用.text方法无法获取,需改用get_attribute('alt')。
2. 未等待页面加载完成
页面未完全加载就执行元素查找操作,可能导致元素未被定位到,需添加显式等待确保元素加载完成。
修正后的代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC chrome_options = webdriver.ChromeOptions() chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) chrome_options.add_experimental_option("detach", True) prefs = { 'profile.default_content_setting_values': { 'images': 2, } } chrome_options.add_experimental_option('prefs', prefs) chrome_options.add_argument('lang=en') driver = webdriver.Chrome(options=chrome_options) driver.maximize_window() driver.get('https://www.amazon.com/dp/B09VDD8D8R') # 显式等待元素加载,最长等待10秒 wait = WebDriverWait(driver, 10) page_star = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "a-icon-alt"))) # 获取元素的alt属性值 page_star_text = page_star.get_attribute('alt') print(page_star_text) # 输出应为"4.1 out of 5 stars"
可选:更精准的定位
如果页面存在多个a-icon-alt类元素,可结合父元素缩小范围,比如使用XPATH定位:
page_star = wait.until(EC.presence_of_element_located((By.XPATH, "//div[@id='averageCustomerReviews']//span[@class='a-icon-alt']")))
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

