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

Selenium网页抓取:Google Colab中无法定位筹款轮次按钮

解决方案:修复Selenium定位筹款轮次按钮的问题

你遇到的问题主要源于绝对XPath的脆弱性、元素未滚动到可视区域以及未等待元素加载完成这几个点,下面是具体的修复步骤:

1. 替换绝对XPath为相对定位

绝对XPath完全依赖页面的DOM层级结构,只要页面布局稍有变动就会失效。改用相对定位,比如根据按钮的文本内容或类名定位,稳定性会高很多:

  • 定位单个轮次按钮(比如Series A)://button[contains(text(), 'Series A')]
  • 定位所有筹款轮次按钮://section[contains(@class, 'funding-round')]//button

2. 滚动到元素可视区域

目标按钮在页面下方,直接定位会因为元素不可见导致失败,需要先滚动到元素位置:
可以用execute_script执行JS滚动,确保元素进入浏览器可视范围。

3. 增加显式等待

页面动态内容加载需要时间,直接调用find_element可能会在元素未渲染完成时执行,导致找不到元素。用WebDriverWait等待元素可点击后再操作。

4. 调整Headless窗口大小

Colab中Headless模式默认窗口很小,部分元素可能不在可视范围内,需要设置合适的窗口大小。

完整修正代码

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

options = Options()
options.add_argument('--headless=new')  # 新版Headless兼容性更好
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--window-size=1920,1080')  # 设置窗口大小,确保元素可视

driver = webdriver.Chrome(options=options)
driver.get('https://dropstab.com/coins/centrifuge/fundraising')

try:
    # 等待第一个筹款轮次按钮加载完成并可点击
    wait = WebDriverWait(driver, 10)
    button = wait.until(EC.element_to_be_clickable((By.XPATH, "//section[contains(@class, 'funding-round')]//button")))
    
    # 滚动到按钮位置
    driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", button)
    
    # 点击按钮
    button.click()
    
    # 这里可以添加获取点击后展示的数据的代码
    # ...
    
finally:
    driver.quit()

批量点击所有轮次按钮的扩展代码

如果需要逐个点击所有筹款轮次按钮,可以用以下代码循环处理:

buttons = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//section[contains(@class, 'funding-round')]//button")))
for btn in buttons:
    driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", btn)
    btn.click()
    # 等待当前轮次数据加载完成,可根据实际情况调整等待条件
    wait.until(EC.visibility_of_element_located((By.XPATH, "//div[contains(@class, 'funding-details')]")))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:05:07