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

使用Selenium+Python爬取GitHub仓库星数时find_elements返回空列表

解决方案

核心问题分析

你的XPath返回空列表主要有两个原因:

  1. GitHub仓库列表是动态渲染的,直接调用find_elements时元素还未加载完成;
  2. 你的XPath仅定位了a标签,漏掉了零星仓库对应的span标签,且部分定位逻辑依赖易变的属性(比如SVG的path的d值)。

可行的定位方案

使用以下XPath可以同时匹配带星数链接的a标签和零星仓库的span标签,且不依赖易变属性:

//*[self::a or self::span][.//svg[contains(@class, 'octicon-star')]]

逻辑说明:

  • self::a or self::span:匹配所有a或span标签;
  • .//svg[contains(@class, 'octicon-star')]:确保标签内部包含带有octicon-star类的SVG图标(GitHub星标的标识)。

完整代码示例

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

# 初始化浏览器驱动(根据你的浏览器类型调整,比如Chrome/Firefox)
driver = webdriver.Chrome()
driver.get("https://github.com/orgs/PowerShell/repositories")

try:
    # 显式等待元素加载,最长等待10秒(避免因动态渲染导致的元素未找到)
    wait = WebDriverWait(driver, 10)
    star_elements = wait.until(
        EC.presence_of_all_elements_located(
            (By.XPATH, "//*[self::a or self::span][.//svg[contains(@class, 'octicon-star')]]")
        )
    )

    # 遍历提取星数信息
    for elem in star_elements:
        star_count = elem.text.strip()
        if elem.tag_name == "a":
            # 有星数的仓库可以获取星标页面链接
            star_link = elem.get_attribute("href")
            print(f"仓库星数: {star_count}, 星标链接: {star_link}")
        else:
            # 零星仓库无链接,直接输出星数
            print(f"仓库星数: {star_count} (零星仓库)")

finally:
    # 关闭浏览器
    driver.quit()

额外说明

  • 如果需要爬取多页仓库,需添加分页逻辑:定位分页按钮(比如下一页按钮),循环点击并重复提取星数;
  • 避免使用SVG的path的d值作为定位依据,GitHub可能会随时更新该属性值导致定位失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:30:55