Selenium爬虫用Xpath获取Freightos网站FBX价格返回空列表求助
问题分析与解决方案
你的代码返回空元素列表,核心问题有三个:
- 未访问目标网页:代码里缺少
driver.get()调用,Selenium操作的是空白页面,自然找不到任何元素 - 绝对XPATH不稳定:全路径XPATH依赖页面固定结构,只要页面有微小调整就会失效,且可读性极差
- 无加载等待逻辑:直接查找元素时,页面可能还没完成渲染,目标元素尚未生成
修正后的代码
from selenium import webdriver from selenium.webdriver.edge.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 替换为你的Edge驱动实际路径 e_driver_path = "你的msedgedriver.exe路径" s = Service(e_driver_path) driver = webdriver.Edge(service=s) # 1. 打开目标网站 driver.get("https://fbx.freightos.com/") try: # 2. 显式等待10秒,直到价格元素加载完成 # 用相对XPATH定位:通过"Current FBX"文本关联对应的价格元素 price_element = WebDriverWait(driver, 10).until( EC.presence_of_element_located( (By.XPATH, "//div[text()='Current FBX']/following-sibling::div//span[@class='sc-12jmuzh-0 jHwMqM']") ) ) # 3. 输出目标价格 print(price_element.text) finally: # 确保浏览器进程被关闭 driver.quit()
关键优化说明
- 补充网页访问步骤:必须通过
driver.get()主动打开目标站点,这是爬虫的基础操作 - 使用显式等待:
WebDriverWait会等待元素渲染完成后再执行操作,彻底解决页面加载延迟导致的元素丢失问题 - 改用相对XPATH:通过文本
Current FBX关联价格元素,比绝对路径更稳定,页面局部结构变化也不容易失效 - 添加资源清理:
finally块确保无论代码是否报错,浏览器都会被关闭,避免残留后台进程
内容的提问来源于stack exchange,提问作者turtle rough
相关产品推荐
相关产品推荐

