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

使用Selenium无法获取指定网页全部链接的技术求助

解决方案

1. 修复核心问题:移除死循环

你的代码里的while True是无限循环,会持续重复获取<a>标签并添加到列表,导致程序永远无法执行到后续的打印步骤,这是最直接的问题。

2. 等待页面动态加载完成

该网站使用React/MUI框架渲染页面,元素是动态加载的,直接调用find_elements可能会因为页面未加载完全漏抓链接。需要用显式等待确保元素加载完毕。

3. 处理非标准链接元素

你提到的<h1>标签带有pointer类,这类元素通常是通过JavaScript绑定跳转事件,而非标准<a>标签,需要额外处理来提取跳转目标。


修正后的完整代码

情况1:获取所有标准<a>标签的链接

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

driver = webdriver.Chrome()
url = 'https://vajiramandravi.com/upsc-daily-current-affairs/prelims-pointers/d/2-January-2023/'
driver.get(url)

# 等待页面至少加载出一个<a>标签,最长等待10秒
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.TAG_NAME, 'a')))

# 获取所有<a>标签
all_a_links = driver.find_elements(By.TAG_NAME, 'a')

# 提取并打印有效链接(过滤空值和锚点链接)
for link in all_a_links:
    href = link.get_attribute('href')
    if href and href.startswith(('http://', 'https://')):
        print(href)

driver.quit()

情况2:额外获取带pointer类的非标准跳转元素

如果需要抓取类似那个<h1>的可点击跳转元素,可以添加以下代码(放在上面代码的driver.quit()之前):

# 获取所有带pointer类的元素
pointer_elements = driver.find_elements(By.CLASS_NAME, 'pointer')

for elem in pointer_elements:
    try:
        # 通过执行JavaScript提取跳转目标(根据页面实际JS逻辑调整)
        # 示例:优先检查data-href属性,再尝试从onclick事件中匹配URL
        target_url = driver.execute_script("""
            var elem = arguments[0];
            if (elem.dataset.href) return elem.dataset.href;
            var onclickStr = elem.onclick.toString();
            var match = onclickStr.match(/https?:\/\/[^'"]+/);
            return match ? match[0] : null;
        """, elem)
        if target_url:
            print(target_url)
    except Exception:
        # 提取失败则跳过该元素
        continue

关键说明

  • 显式等待避免了页面未加载完全导致的元素漏抓问题,比强制等待(time.sleep())更高效可靠。
  • 非标准跳转元素的提取逻辑需要根据页面实际的JavaScript代码调整,你可以通过浏览器开发者工具查看元素的事件绑定或属性,优化提取规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:32:05