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

如何用Selenium拦截点击链接并识别目标最外层父容器元素?

实现方案及工具选择

一、核心实现步骤

1. 初始化Selenium并拦截跳转请求

要阻止点击链接后的页面跳转,可利用Chrome DevTools Protocol(CDP)拦截文档类型的网络请求,示例代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

options = Options()
driver = webdriver.Chrome(options=options)

# 启用网络监控
driver.execute_cdp_cmd("Network.enable", {})

# 定义拦截规则:阻止非当前页面的文档导航请求
def intercept_request(request):
    if request["type"] == "Document" and request["url"] != driver.current_url:
        return {"cancel": True}

# 启用请求拦截
driver.execute_cdp_cmd(
    "Network.setRequestInterception",
    {"patterns": [{"urlPattern": "*", "resourceType": "Document"}]}
)
driver.add_cdp_listener("Network.requestIntercepted", intercept_request)

# 打开目标站点
driver.get("http://mynewssite.com/")

2. 定位包含所有新闻的父容器

当用户点击某个“read more”链接后,通过JS追溯元素层级,找到该链接所属的新闻条目,再向上获取包含所有条目的父容器:

# 等待用户完成点击操作
input("点击目标'read more'链接后按回车继续...")

# 通过JS获取被点击元素的父级新闻条目
target_item = driver.execute_script("""
    // 绑定点击事件记录最后点击的元素
    if (!document.lastClicked) {
        document.addEventListener('click', e => document.lastClicked = e.target, true);
    }
    let elem = document.lastClicked;
    // 向上遍历找到包含新闻链接的条目容器
    while (elem && !elem.querySelector('a[href]')) {
        elem = elem.parentElement;
    }
    return elem;
""")

# 获取所有新闻条目的父容器
news_container = target_item.parentElement

3. 提取所有新闻条目列表

从父容器中提取所有子div,组成目标列表:

# 获取所有新闻条目元素
items = news_container.find_elements(By.XPATH, "./div")

# 输出结果示例(可根据需求调整输出格式)
for index, item in enumerate(items):
    print(f"[{index}] {item.get_attribute('outerHTML')[:50]}...")

二、工具选择:仅Selenium足够,无需额外库

完全不需要结合BeautifulSoup或其他解析工具,原因如下:

  • Selenium原生支持CDP协议,能直接实现请求拦截,阻止页面跳转。
  • 内置的元素定位(XPath、CSS选择器)和JavaScript执行能力,足以完成DOM层级的追溯和元素提取。
  • 可以直接获取元素的outerHTML属性,无需额外解析HTML字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:55:57