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

Python中Selenium爬取fxhash页面无结果问题求助

问题解决:爬取fxhash交易记录并存入DataFrame

问题原因分析

  • XPATH定位不准确:原代码中用于点击“activity”标签和抓取交易元素的XPATH与页面实际结构不匹配,导致无法定位目标元素。
  • 依赖固定等待时间:固定time.sleep()无法保证元素完全加载,容易出现元素未就绪就执行后续操作的情况。
  • 未处理滚动加载:交易记录采用滚动加载机制,原代码未触发滚动,只能获取初始加载的少量(或零)数据。

修正后的完整代码

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
from webdriver_manager.chrome import ChromeDriverManager
import pandas as pd
import time

# 初始化浏览器
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://www.fxhash.xyz/marketplace/generative/15063")
driver.maximize_window()

try:
    # 显式等待并点击Activity标签
    activity_tab = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, '//div[text()="activity"]'))
    )
    activity_tab.click()

    # 滚动加载所有交易记录
    last_height = driver.execute_script("return document.body.scrollHeight")
    while True:
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(3)
        new_height = driver.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            break
        last_height = new_height

    # 获取所有交易条目
    transactions = WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located((By.XPATH, '//article[contains(@class, "Action_container")]'))
    )

    # 提取交易数据
    data = []
    for trans in transactions:
        # 过滤仅保留买卖交易记录
        if "sold" in trans.text.lower() or "bought" in trans.text.lower():
            # 提取买卖双方信息
            parties = trans.find_elements(By.XPATH, './/a[contains(@class, "Action_link")]')
            seller = parties[0].text if len(parties) >= 1 else "N/A"
            buyer = parties[1].text if len(parties) >= 2 else "N/A"
            
            # 提取价格与日期
            price = trans.find_element(By.XPATH, './/div[contains(@class, "Action_price")]').text
            date = trans.find_element(By.XPATH, './/div[contains(@class, "Action_date")]').text
            
            data.append({
                "卖家": seller,
                "买家": buyer,
                "价格": price,
                "日期": date
            })

    # 转换为DataFrame
    df = pd.DataFrame(data)
    print(df)
    # 可选:保存到本地文件
    # df.to_csv("fxhash_transactions.csv", index=False)

finally:
    driver.quit()

核心修改说明

  • 显式等待替代固定sleep:使用WebDriverWait等待元素就绪,避免因页面加载延迟导致的元素定位失败。
  • 修正元素定位规则:根据页面实际DOM结构调整XPATH,确保能精准定位Activity标签和交易条目。
  • 实现滚动加载逻辑:通过循环滚动页面到底部,触发所有交易记录的加载,保证数据完整性。
  • 数据过滤与精准提取:过滤掉铸造(mint)等非交易类记录,仅提取买卖双方、价格、日期等目标字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:57:40