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

如何使用Python从带ng-if属性的div元素中提取链接?

嘿,我来帮你搞定这个问题!要抓取带有ng-if属性的元素里的链接,得先区分页面是静态渲染还是动态加载的——毕竟AngularJS的ng-if是根据表达式动态决定是否渲染元素的,下面分两种场景给你具体方案:

场景1:页面已静态渲染目标元素(查看源码能看到标签)

如果目标<a>标签已经在页面源码里能找到(说明ng-if的表达式已经在服务端或页面加载时就渲染完成了),用BeautifulSoup+requests就能轻松搞定:

  1. 先安装依赖包:
pip install requests beautifulsoup4
  1. 示例代码:
import requests
from bs4 import BeautifulSoup

# 替换成你的目标页面URL
target_url = "https://your-target-page.com"
response = requests.get(target_url)
# 解析HTML内容
soup = BeautifulSoup(response.text, "html.parser")

# 方法1:精准匹配ng-if属性值和class
target_links = soup.find_all(
    "a",
    class_="Name",
    attrs={"ng-if": "!People.disableActions"}
)

# 方法2:如果ng-if的表达式有变体,也可以用模糊匹配(比如包含disableActions)
# target_links = soup.find_all("a", class_="Name", attrs={"ng-if": lambda x: x and "disableActions" in x})

# 提取链接和文本内容
for link in target_links:
    link_text = link.get_text(strip=True)
    link_href = link["href"]
    print(f"姓名: {link_text}, 链接: {link_href}")
场景2:页面是动态渲染(查看源码看不到标签)

如果页面源码里只有Angular模板,看不到渲染后的<a>标签(说明ng-if是在浏览器端动态判断渲染的),这时候需要用Selenium模拟浏览器加载页面,等待元素渲染完成后再抓取:

  1. 先安装依赖包,同时要下载对应浏览器的驱动(比如ChromeDriver,版本要和你的浏览器版本匹配):
pip install selenium
  1. 示例代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

target_url = "https://your-target-page.com"
# 初始化浏览器驱动(这里用Chrome,也可以换成Firefox等)
driver = webdriver.Chrome()
driver.get(target_url)

try:
    # 等待目标元素加载完成,最多等待10秒
    # 用CSS选择器定位:class为Name且ng-if属性值为!People.disableActions的a标签
    target_elements = WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located(
            (By.CSS_SELECTOR, 'a.Name[ng-if="!People.disableActions"]')
        )
    )

    # 提取每个元素的文本和链接
    for elem in target_elements:
        print(f"姓名: {elem.text.strip()}")
        print(f"链接: {elem.get_attribute('href')}")
finally:
    # 不管成功失败,最后都关闭浏览器
    driver.quit()

小提示

  • 用CSS选择器定位元素非常灵活,比如a[ng-if*="disableActions"]可以匹配所有ng-if属性里包含disableActions的a标签
  • 如果页面有多个符合条件的元素,find_all(BeautifulSoup)或presence_of_all_elements_located(Selenium)会返回所有匹配的元素
  • Selenium驱动一定要和浏览器版本对应,不然会出现启动失败的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:06:45