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

使用Python+Selenium爬取Gem.xyz页面时内容隐藏问题咨询

问题分析与解决方法

为什么价格内容未显示?

  • 动态内容延迟加载:该页面的价格数据是通过JavaScript动态渲染生成的,Selenium刚加载页面时JS还未执行完毕,导致driver.page_source中没有价格相关代码,直接定位自然找不到元素。
  • 反爬机制拦截:Gem.xyz可能检测到自动化工具(如Selenium),会限制或不返回动态内容,比如识别无头浏览器特征、自动化标记等。
  • 元素未完全加载:价格元素需要等待页面其他资源加载完成后才会渲染,直接执行定位代码时元素还未出现在DOM中。

如何提取价格内容?

1. 显式等待元素加载

使用Selenium的WebDriverWait配合预期条件,等待价格元素可见或存在后再定位,避免因加载延迟导致失败:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.gem.xyz/collection/official-v1-punks/")

# 等待最多10秒,直到价格元素可见
wait = WebDriverWait(driver, 10)
price_elements = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "你的CSS选择器")))

# 提取价格文本
for elem in price_elements:
    print(elem.text)

driver.quit()

2. 模拟真实浏览器环境

修改Chrome选项,隐藏自动化特征,避免被反爬机制识别:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
# 设置真实User-Agent
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
# 禁用自动化控制检测
options.add_argument("--disable-blink-features=AutomationControlled")

driver = webdriver.Chrome(options=options)
driver.get("https://www.gem.xyz/collection/official-v1-punks/")

3. 直接抓取API数据

打开Chrome开发者工具的Network面板,筛选XHR/Fetch请求,找到返回价格数据的API接口,直接发送HTTP请求获取数据,这种方式比Selenium更高效:

import requests

url = "找到的API接口URL"
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    # 补充其他必要请求头,如cookie、referer等
}

response = requests.get(url, headers=headers)
price_data = response.json()
# 解析JSON提取价格
print(price_data)

4. 滚动页面触发加载

部分页面的价格元素需要滚动到可视区域才会加载,可通过JS代码滚动页面:

# 滚动到页面底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 等待元素加载
wait = WebDriverWait(driver, 10)
price_elements = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "你的XPath")))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:20:34