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
相关产品推荐
相关产品推荐

