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

使用re.compile结合BeautifulSoup定位span元素返回None的解决方法

解决方法及排查步骤

1. 先确保页面完成动态加载

返回None最常见的原因是Selenium获取页面源码时,目标span还没被JavaScript渲染出来。必须先等待页面加载完成:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 等待目标span所在区域加载完成(可替换为更精确的选择器,比如父元素ID)
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.TAG_NAME, "span"))
)
# 再获取完整的页面源码
page_source = driver.page_source

2. 修正正则匹配规则

如果span文本不是精确的Adresse,而是带空格、标点或大小写变化,要调整正则表达式:

  • 匹配包含Adresse的任意文本(忽略大小写):re.compile(r'.*Adresse.*', re.IGNORECASE)
  • 仅匹配以Adresse开头的文本:re.compile(r'^Adresse')
  • 匹配带冒号的场景(比如Adresse:):re.compile(r'Adresse:*')

3. 正确结合BeautifulSoup使用

场景1:span为纯文本(无嵌套子标签)

直接用text参数配合正则查找:

import re
from bs4 import BeautifulSoup

soup = BeautifulSoup(page_source, 'html.parser')
target_span = soup.find('span', text=re.compile(r'.*Adresse.*', re.IGNORECASE))

场景2:span内嵌套其他标签(比如<span><b>Adresse</b>: 123 Main St</span>)

此时tag.string会返回None,需要通过get_text()获取完整文本后判断:

target_span = soup.find('span', lambda tag: 'Adresse' in tag.get_text(strip=True))

4. 排查验证步骤

  • 打印page_source并搜索Adresse,确认源码中确实存在目标span
  • 如果源码有但BeautifulSoup找不到,尝试更换解析器(比如用lxml代替html.parser)
  • 用Selenium直接定位元素验证:driver.find_element(By.XPATH, "//span[contains(text(), 'Adresse')]"),确认元素是否可被定位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 07:52:39