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

如何用Selenium获取GitHub项目已关闭Issue页面的所有URL?

解决GitHub已关闭Issue链接仅返回第一个的问题

你的代码只拿到第一个URL,核心原因是//div[@aria-label="Issues"]这个XPATH匹配的是整个Issue列表的外层容器,而非单个Issue条目——driver.find_elements只会获取到这一个容器元素,最终列表推导式自然只返回一个链接。

下面是两种可行的修复方案:

方案1:直接定位所有标题链接

GitHub每个已关闭Issue的标题链接都嵌套在列表容器内的h4标签下,直接定位所有符合条件的a标签就能一次性拿到当前页面所有链接:

repo_closed_url = [a.get_attribute('href') for a in driver.find_elements(By.XPATH, '//div[@aria-label="Issues"]//h4/a')]

方案2:遍历单个Issue条目(适合后续扩展操作)

如果之后需要从每个Issue里提取更多信息(比如标题、评论数),可以先定位每个Issue的条目元素,再从中提取链接:

# 定位页面中所有Issue条目(GitHub的Issue条目默认带js-issue-row类)
issue_rows = driver.find_elements(By.CLASS_NAME, 'js-issue-row')
repo_closed_url = []
for row in issue_rows:
    # 从当前条目里找到h4下的链接
    issue_link = row.find_element(By.CLASS_NAME, 'h4').find_element(By.TAG_NAME, 'a').get_attribute('href')
    repo_closed_url.append(issue_link)

额外提示

为了避免页面未加载完成导致的元素找不到问题,建议用显式等待确保列表容器加载完毕:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待10秒,直到Issue列表容器出现
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//div[@aria-label="Issues"]')))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:30:48