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

