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

Python Selenium爬取rarity.tools页面无法获取a标签href及文本求助

问题根因

你遇到的现象不是页面做了内容加密,核心是两个原因:

  • rarity.tools的NFT卡片采用懒加载逻辑,只有卡片进入浏览器视口后,才会异步请求加载所有者地址、链接这类附加数据,你直接打开页面就定位元素,此时a标签虽然已经在DOM树里,但href和文本内容还没被填充,所以拿不到对应值
  • 你用的presence_of_element_located等待条件仅判断元素是否存在于DOM中,不会校验元素内容是否加载完成,逐行调试时因为操作间隔长,数据已经异步加载完成,所以能正常拿到内容

解决方案

1. 调整等待逻辑,改用更精准的等待条件

替换等待规则,直接等待a标签的文本内容不为空,或者href属性生成后再取值:

import time
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

PATH = "C:\Program Files (x86)\chromedriver"
driver = webdriver.Chrome(PATH)
driver.implicitly_wait(10)
driver.get("https://rarity.tools/thecryptodads")

try:
    # 等待首张卡片的所有者a标签内容加载完成
    owner_a = WebDriverWait(driver, 15).until(
        lambda d: d.find_element(By.XPATH, '//*[@id="__next"]/div/div/div[2]/div[2]/div[8]/div[1]/div[1]/div/div[1]/a') 
        if d.find_element(By.XPATH, '//*[@id="__next"]/div/div/div[2]/div[2]/div[8]/div[1]/div[1]/div/div[1]/a').text.strip() != '' 
        else False
    )
    print("所有者名称:", owner_a.text)
    print("所有者页面链接:", owner_a.get_attribute('href'))
except Exception as e:
    print("加载超时:", str(e))

2. 批量爬取时补充滚动触发逻辑

如果需要爬取所有卡片的所有者信息,需要模拟页面滚动,逐批触发卡片的懒加载:

# 示例滚动逻辑,每次向下滚动1000px,等待2秒触发加载
for i in range(10):
    driver.execute_script(f"window.scrollTo(0, {i*1000})")
    time.sleep(2)

优化建议

不要使用绝对路径XPath,页面结构稍有变动就会定位失效,建议先定位卡片的通用类名容器,再从容器下查找所有者a标签,稳定性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:18:02