改写Selenium旧脚本提取GitHub闭源Issue链接遇AttributeError求助
问题分析与解决
错误原因
你代码里的driver.find_elements(By.XPATH, '//div[@aria-label="Issues"]')返回的是元素列表,而列表对象没有find_element方法,这就是触发AttributeError的直接原因。
修正方案
首先,GitHub页面上只有一个符合//div[@aria-label="Issues"]的元素,所以应该用find_element(单数)定位这个父容器,而非find_elements(复数)。其次,要准确抓取已关闭Issue的链接,需要先切换到"Closed"标签页,再定位对应列表里的Issue标题链接。
修正后的代码示例:
# 定位Issues区域的父容器 issues_container = driver.find_element(By.XPATH, '//div[@aria-label="Issues"]') # 点击"Closed"标签,切换到已关闭Issue页面 closed_tab = issues_container.find_element(By.LINK_TEXT, 'Closed') closed_tab.click() # 等待页面加载完成(新手必须加等待,避免元素未加载就抓取) from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, 'js-issue-row'))) # 抓取所有已关闭Issue的链接 repo_closed_url = [link.get_attribute('href') for link in issues_container.find_elements(By.XPATH, './/h4[@class="h4"]/a')]
额外提示
- 务必学会使用显式等待(如上述
WebDriverWait),避免因页面加载慢导致元素找不到的问题。 - 定位子元素时,用相对路径(开头加
.,比如.//h4)表示在父元素范围内查找,而非整个页面,定位更精准。 - 若不想手动切换标签,也可直接构造已关闭Issue的URL(格式为
https://github.com/用户名/仓库名/issues?q=is%3Aissue+is%3Aclosed),直接访问后抓取链接,效率更高。
内容的提问来源于stack exchange,提问作者Mano Haran
相关产品推荐
相关产品推荐

