使用Selenium Python爬取Shopee数据时无法获取销量内容求助
解决Shopee月售数据抓取返回空的问题
问题根源
你的CSS选择器语法错误,且未考虑页面动态加载特性,导致无法定位到目标元素。
修复步骤
1. 修正CSS选择器
原选择器 div.r6HknA+uEPGHT 不符合语法规范:+ 作为相邻兄弟选择器,后面必须跟完整的元素选择器。正确写法应为:
# 定位class为r6HknA的div的相邻兄弟div(class为uEPGHT) sales_elements = driver.find_elements(By.CSS_SELECTOR, "div.r6HknA + div.uEPGHT")
如果 uEPGHT 是月售元素独有的class,也可直接简化为:
sales_elements = driver.find_elements(By.CSS_SELECTOR, "div.uEPGHT")
2. 等待元素动态加载
Shopee页面采用动态渲染,直接调用查找方法时元素可能未加载完成,需添加显式等待:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 最长等待10秒,直到所有目标元素出现 wait = WebDriverWait(driver, 10) sales_elements = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div.r6HknA + div.uEPGHT"))) # 遍历输出元素文本 for elem in sales_elements: print(elem.text)
3. 检查iframe嵌套情况
若目标元素嵌套在iframe中,需先切换到iframe再执行查找:
# 定位目标iframe(需根据实际页面结构调整选择器) iframe = driver.find_element(By.CSS_SELECTOR, "iframe[src*='search']") driver.switch_to.frame(iframe) # 执行元素查找操作(同上述步骤) sales_elements = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div.r6HknA + div.uEPGHT"))) # 操作完成后切回主文档 driver.switch_to.default_content()
4. 验证元素class有效性
Shopee的元素class可能会动态更新,建议重新通过浏览器开发者工具(F12)定位目标元素,确认最新的class属性及DOM结构,避免因class失效导致定位失败。
内容的提问来源于stack exchange,提问作者Luận Đặng Văn
相关产品推荐
相关产品推荐

