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

如何用Selenium获取GitHub搜索结果中的仓库标题?

解决思路及修正代码

问题核心原因

  1. 页面未加载完成就执行查找:搜索回车后页面需要渲染时间,直接查找元素时目标内容还未生成,导致返回空列表。
  2. 绝对XPath不可靠:你使用的绝对路径完全依赖页面DOM层级,页面布局稍有变动就会失效,且仅定位了第一个仓库,无法获取所有结果。
  3. 未提取元素文本:find_elements返回的是WebElement对象集合,直接打印只能看到对象引用,必须提取.text属性才能拿到标题内容。

修正方案

  • 用显式等待替代无意义的sleep,确保元素加载完成后再执行查找,更高效可靠。
  • 使用相对定位器,基于元素的稳定特征(比如标签结构、属性)定位,避免依赖绝对路径。
  • 遍历元素列表,提取每个元素的文本内容。

修正后的代码

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.service import Service

# 初始化驱动(新版本Selenium推荐用Service类)
service = Service('path/chromedriver.exe')
driver = webdriver.Chrome(service=service)

url = "http://github.com"
driver.get(url)

# 执行搜索操作
search_input = driver.find_element(By.NAME, "q")
search_input.send_keys("python")
search_input.send_keys(Keys.ENTER)

# 显式等待仓库标题元素加载,最长等待10秒
wait = WebDriverWait(driver, 10)
repo_title_elements = wait.until(EC.presence_of_all_elements_located(
    (By.CSS_SELECTOR, 'div[data-testid="results-list"] h3 a')
))

# 提取所有仓库标题文本
repo_titles = [element.text.strip() for element in repo_title_elements]

# 打印结果
for index, title in enumerate(repo_titles, 1):
    print(f"{index}. {title}")

driver.close()

补充说明

  • 若使用旧版Selenium(低于4.x),可保留executable_path的写法,但建议升级到新版本以获得更好的兼容性。
  • CSS选择器div[data-testid="results-list"] h3 a是基于GitHub搜索结果页面的稳定特征,也可尝试ul.repo-list h3 a作为备选,可根据页面实际结构调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:35:27