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

如何更简洁地在Selenium中定位元素?CoinMarketCap爬取优化

优化CoinMarketCap加密货币表格链接爬取的选择器

你当前的代码能正常获取目标链接,但硬编码的完整XPath过于依赖页面结构,一旦页面布局微调就可能失效。已知目标表格带有类名sc-66133f36-3 etbEmy cmc-table,可以通过以下几种更简洁、更健壮的方式优化选择器:

方案1:使用CSS选择器定位表格

CSS选择器针对类名的定位更直观易读,且稳定性比完整XPath更强:

def get_all_links(self):
    """
    Return a list of links from the webpage
    """
    # 用CSS选择器直接定位目标表格
    prop_container = self.driver.find_element(by=By.CSS_SELECTOR, value='table.sc-66133f36-3.etbEmy.cmc-table')
    table_body_container = prop_container.find_element(by=By.TAG_NAME, value='tbody')
    table_row_list = table_body_container.find_elements(by=By.TAG_NAME, value='tr')
    
    link_list = []
    for crypto in table_row_list:
        a_tag = crypto.find_element(by=By.TAG_NAME, value='a')
        link = a_tag.get_attribute('href')
        link_list.append(link)
    
    return link_list

方案2:简化XPath,通过类名定位表格

如果坚持用XPath,也可以直接通过类名匹配,不用写完整路径:

def get_all_links(self):
    """
    Return a list of links from the webpage
    """
    # 通过类名简化XPath定位(模糊匹配核心类名,兼容类名顺序变化)
    prop_container = self.driver.find_element(by=By.XPATH, value='//table[contains(@class, "cmc-table")]')
    # 如需精确匹配完整类名://table[@class="sc-66133f36-3 etbEmy cmc-table"]
    table_body_container = prop_container.find_element(by=By.XPATH, value='./tbody')
    table_row_list = table_body_container.find_elements(by=By.XPATH, value='./tr')
    
    link_list = []
    for crypto in table_row_list:
        a_tag = crypto.find_element(by=By.TAG_NAME, value='a')
        link = a_tag.get_attribute('href')
        link_list.append(link)
    
    return link_list

方案3:一步到位定位所有目标链接

可以直接定位表格行内的所有<a>标签,省去中间分步查找的步骤,进一步简化代码:

def get_all_links(self):
    """
    Return a list of links from the webpage
    """
    # 用CSS选择器直接定位表格内的所有行链接
    link_elements = self.driver.find_elements(by=By.CSS_SELECTOR, value='table.sc-66133f36-3.etbEmy.cmc-table tbody tr a')
    # 提取所有链接的href属性
    link_list = [link.get_attribute('href') for link in link_elements]
    
    return link_list

优化说明

  • CSS选择器是前端定位元素的常用方式,语法简洁且对页面结构变化的容忍度更高;
  • 避免使用完整硬编码XPath,这类路径完全依赖DOM层级,页面微小改动就会导致定位失败;
  • 方案3的列表推导式让代码更紧凑,同时减少了多次DOM查找的开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:00:25