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

使用Selenium网页抓取后Excel无结果问题求助(附代码)

问题描述

需要从戴尔支持页面提取序列号(Serial Number)和保修到期日期(Expiry Date)并导出至Excel:

  • 运行Selenium代码后,仅生成带表头的空Excel文件,Chrome浏览器弹出但无法获取数据
  • 尝试使用BeautifulSoup的代码则生成完全空的Excel

原Selenium代码:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import pandas as pd

url = "https://www.dell.com/support/home/en-sg/product-support/servicetag/0-ZUQwbW14d28xZHZBYTZWNDdHVy80Zz090/overview"
path = "C:\Users\ChloeChew\Downloads\chromedriver_win32\chromedriver.exe"

service = Service(executable_path=path)
driver = webdriver.Chrome(service=service)
driver.get(url)

frame = driver.find_elements(by="xpath", value="//div[@class='product-info d-flex flex-column align-items-center d-lg-block product-info-width']")

serialnumbers = []
expirydates = []

for result in frame:
    serialnumber = driver.find_elements(by="xpath", value="//div[@class='service-tag mb-0 d-none d-lg-block']")
    expirydate = driver.find_elements(by="xpath", value="//div[@class='warrantyExpiringLabel mb-0 ml-1 mr-1']")

    serialnumbers.append(serialnumber)
    expirydates.append(expirydate)

my_dict = {'serialnumber' : serialnumbers, 'expirydate' : expirydates}
df_headlines=pd.DataFrame(my_dict)
df_headlines.to_excel("practice123.xlsx")
问题分析
  1. 页面加载等待缺失:页面为动态渲染,直接查找元素时内容还未加载完成,导致获取不到有效数据
  2. 元素处理逻辑错误:使用find_elements()返回的是元素列表而非文本内容,直接存入列表会导致Excel中只有空对象;且循环内用全局driver查找,外层frame循环完全冗余
  3. 路径转义问题:Windows路径中的反斜杠未转义,可能导致ChromeDriver无法正常启动
修复后的代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import pandas as pd

url = "https://www.dell.com/support/home/en-sg/product-support/servicetag/0-ZUQwbW14d28xZHZBYTZWNDdHVy80Zz090/overview"
# 使用原始字符串避免转义问题,或把反斜杠替换为双反斜杠
path = r"C:\Users\ChloeChew\Downloads\chromedriver_win32\chromedriver.exe"

service = Service(executable_path=path)
driver = webdriver.Chrome(service=service)
driver.get(url)

# 等待页面关键元素加载,最长等待10秒
wait = WebDriverWait(driver, 10)

serialnumbers = []
expirydates = []

# 获取序列号文本
try:
    serial_element = wait.until(EC.presence_of_element_located((By.XPATH, "//div[@class='service-tag mb-0 d-none d-lg-block']")))
    serialnumbers.append(serial_element.text.strip())
except Exception as e:
    print(f"获取序列号失败: {e}")
    serialnumbers.append("N/A")

# 获取到期日期文本
try:
    expiry_element = wait.until(EC.presence_of_element_located((By.XPATH, "//div[@class='warrantyExpiringLabel mb-0 ml-1 mr-1']")))
    expirydates.append(expiry_element.text.strip())
except Exception as e:
    print(f"获取到期日期失败: {e}")
    expirydates.append("N/A")

# 构造DataFrame并导出,关闭索引列
my_dict = {'serialnumber': serialnumbers, 'expirydate': expirydates}
df = pd.DataFrame(my_dict)
df.to_excel("dell_warranty_info.xlsx", index=False)

driver.quit()
说明
  • 添加WebDriverWait等待元素加载,确保内容渲染完成后再获取
  • 使用find_element()(单数)获取单个元素,提取text属性得到实际内容
  • 路径使用原始字符串解决转义问题
  • 增加异常捕获,避免程序崩溃并标记缺失数据
  • 导出时设置index=False,避免生成不必要的索引列

内容的提问来源于stack exchange,提问作者Chloe Chew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:40:36