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

如何使用Selenium抓取隐藏app-root元素文本并自动爬取法律修订版本

问题原因

你遇到的返回None的问题是因为目标站点是客户端渲染的单页应用(SPA),初始加载的页面源码只有空的app-root容器和无脚本提示,你调用driver.get()后立刻获取页面源码,此时页面的JS还没完成执行、法律文本内容还没渲染到DOM里,所以BeautifulSoup找不到id为lawcontent的元素。

解决方案

给代码添加显式等待逻辑,等目标元素渲染完成后再提取页面源码即可,修改后的代码如下:

from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager
from selenium.webdriver import FirefoxOptions
# 新增需要导入的等待相关模块
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
from markdownify import markdownify

url = "https://www.fedlex.admin.ch/eli/cc/1999/404/en"

opts = FirefoxOptions()
opts.add_argument("--headless")
# 可选:添加参数避免无头模式被站点识别拦截
opts.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install(), options=opts)
driver.get(url)

# 新增:最多等待10秒,直到lawcontent元素渲染完成
try:
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "lawcontent"))
    )
    # 确认元素出现后再提取页面源码
    html = driver.page_source
    soup = BeautifulSoup(html, "html.parser")
    div = soup.find("div", {"id": "lawcontent"})
    content = markdownify(str(div))
    print(content[:200])
finally:
    # 确保无论是否成功都关闭浏览器进程
    driver.quit()

补充说明

如果遇到偶尔加载失败的情况,可以把等待时长适当拉长到15-20秒,也可以在等待元素出现后再加1秒的强制等待,确保文本内容完全渲染完成再提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:48:03