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

使用Python的Selenium爬取Centris页面描述返回空值的问题咨询

解决Centris页面描述内容爬取问题

问题分析

选择器能定位到元素但返回空文本,核心原因通常是:

  • 元素未完全加载完成,短时间隐式等待不足以覆盖渲染时长
  • 依赖DOM层级的冗长选择器易受页面结构微调影响
  • Selenium的.text方法在部分渲染场景下无法捕获实际文本

可行的定位与解决方法

1. 使用更稳定的选择器

放弃依赖DOM层级的长选择器,改用元素专属属性定位,目标描述元素带有data-id="description"属性,该属性通常不会轻易变动:

  • CSS选择器:div.property-description div[data-id="description"]
  • XPath://div[contains(@class, "property-description")]//div[@data-id="description"]

2. 用显式等待替代隐式等待

隐式等待的3秒可能不足以等待元素完全渲染,显式等待直到元素可见,能确保元素加载完成后再执行文本获取操作。

3. 换用get_attribute获取文本

部分场景下,.text方法无法捕获渲染后的文本,改用get_attribute('innerText')或get_attribute('textContent')可拿到实际内容。

修改后的代码示例

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium_stealth import stealth

# Selenium setup
service = Service(ChromeDriverManager().install())
options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
# 可选:添加自定义User-Agent模拟真实浏览器
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")

browser = webdriver.Chrome(service=service, options=options)
browser.set_page_load_timeout(300)

stealth(browser,
        languages=["en-US", "en"],
        vendor="Google Inc.",
        platform="Win32",
        webgl_vendor="Intel Inc.",
        renderer="Intel Iris OpenGL Engine",
        fix_hairline=True)

url = 'https://www.centris.ca/fr/condo-appartement~a-louer~brossard/17307615?view=Summary&uc=6'
browser.get(url)
browser.maximize_window()

# Extract necessary information
print("URL:", browser.current_url)

# 显式等待元素可见,超时时间10秒
wait = WebDriverWait(browser, 10)
# 使用稳定的CSS选择器定位
descr_element = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'div.property-description div[data-id="description"]')))
# 获取文本内容
descr = descr_element.get_attribute('innerText').strip()

print(descr)
browser.quit()

额外排查点

  • 若headless模式下仍有问题,可临时去掉--headless参数,确认是否是无头模式渲染差异导致
  • 检查页面是否存在iframe,若描述内容在iframe内,需先切换到iframe再定位元素

内容的提问来源于stack exchange,提问作者Lucien S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:03:10